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