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 は 3 秒後にのみ解決されます。その間、タスクは解決されず、待機する必要があります。