异步等待

await 关键字是作为 C#5.0 版本的一部分添加的,从 Visual Studio 2012 开始支持。它利用任务并行库(TPL),使多线程相对容易。asyncawait 关键字成对使用,功能如下所示。await 关键字用于暂停当前异步方法的执行,直到等待的异步任务完成和/或返回其结果为止。要使用 await 关键字,使用它的方法必须使用 async 关键字进行标记。

强烈建议不要使用 asyncvoid。有关详细信息,请查看此处

例:

public async Task DoSomethingAsync()
{    
    Console.WriteLine("Starting a useless process...");
    Stopwatch stopwatch = Stopwatch.StartNew();
    int delay = await UselessProcessAsync(1000);
    stopwatch.Stop();
    Console.WriteLine("A useless process took {0} milliseconds to execute.", stopwatch.ElapsedMilliseconds);
}

public async Task<int> UselessProcessAsync(int x)
{
    await Task.Delay(x);
    return x;
}

输出:

“开始一个无用的过程……”

** ……延迟 1 秒…… **

“无用的进程需要 1000 毫秒才能执行。”

如果 TaskTask<T> 返回方法仅返回单个异步操作,则可以省略关键字对 asyncawait

而不是这个:

public async Task PrintAndDelayAsync(string message, int delay)
{
    Debug.WriteLine(message);
    await Task.Delay(x);
}

最好这样做:

public Task PrintAndDelayAsync(string message, int delay)
{
    Debug.WriteLine(message);
    return Task.Delay(x);
}

Version = 5

在 C#5.0 中,await 不能用于 catchfinally

Version >= 6

使用 C#6.0, await 可用于 catchfinally