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)答案是问题的最佳演示 - 更改'静态任务
是的,我被
愚蠢或不是你的呼叫,但肯定是教育(和写得很好)。两种版本的代码(异步/非异步)看起来似乎是合理的,并且让我感到困惑(我根据选票投注了足够多的人)。 –