非同步等待

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