async
關鍵字做導致CIL更改(即使方法內部沒有等待),但主要是允許await
存在。爲什麼我的TCS不等待?
但我沒想到的是以下情況發生:
static void Main(string[] args)
{
Task t = Go();
t.Wait();
}
static async Task Go()
{
Console.WriteLine(1);
await AAA(3000);
Console.WriteLine(2);
}
static Task<object> AAA(int a) // <--- No `async`
{
TaskCompletionSource<object> tcs = new TaskCompletionSource<object>();
Task.Delay(a).ContinueWith(b => tcs.SetResult(null));
return tcs.Task;
}
本刊:
1
(wait)
2
但是,如果我改變
static Task<object> AAA(int a)
到
static async Task<object> AAA(int a)
它打印:
1
2
(no wait)
問題
爲什麼我看不到延遲? TCS僅在三秒後解決。同時,任務沒有解決,應該等待。
我認爲[razor118](http://stackoverflow.com/a/32785865/477420)答案是問題的最佳演示 - 更改'靜態任務
是的,我被
愚蠢或不是你的呼叫,但肯定是教育(和寫得很好)。兩種版本的代碼(異步/非異步)看起來似乎是合理的,並且讓我感到困惑(我根據選票投注了足夠多的人)。 –