异步等待
await
关键字是作为 C#5.0 版本的一部分添加的,从 Visual Studio 2012 开始支持。它利用任务并行库(TPL),使多线程相对容易。async
和 await
关键字成对使用,功能如下所示。await
关键字用于暂停当前异步方法的执行,直到等待的异步任务完成和/或返回其结果为止。要使用 await
关键字,使用它的方法必须使用 async
关键字进行标记。
强烈建议不要使用 async
和 void
。有关详细信息,请查看此处 。
例:
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 毫秒才能执行。”
如果 Task
或 Task<T>
返回方法仅返回单个异步操作,则可以省略关键字对 async
和 await
。
而不是这个:
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
不能用于 catch
和 finally
。
Version >= 6
使用 C#6.0, await
可用于 catch
和 finally
。