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)
to
static async Task<object> AAA(int a)
它会打印出:
1
2
(no wait)
问题
为什么我看不到延迟?TCS只有在三秒后才被解决。同时,任务没有解决,应该等待。
static Task<object> AAA(int a)
更改为static Task<int> AAA(int a)
(并进行必要的代码更改),然后添加async
。 - Alexei LevenkovTask<Task>
。 - Royi Namir