async
关键字确实会导致CIL发生变化(即使方法内没有 await),但它主要是为了允许await
存在。
但我没想到会发生以下情况:
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 仅在三秒后解决。同时,任务还没有解决,应该等待。