非同步等待
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。