请考虑这个问题,
Task task = new Task (async () =>{
await TaskEx.Delay(1000);
});
task.Start();
task.Wait();
调用task.Wait()方法不会等待任务完成,而是立即执行下一行代码,但是如果我将异步lambda表达式包装到方法调用中,代码将按预期工作。
private static async Task AwaitableMethod()
{
await TaskEx.Delay(1000);
}
然后(根据svick的评论更新)
await AwaitableMethod();
AwaitableMethod
中,您实际上是返回并调用了来自.Delay()
方法的任务(我假设它返回一个Task
)。在异步 lambda 中,您正在调用Task task
上的 Wait。但是,我仍然没有解释。 - Mario Sawait
与Wait()
混合使用时,您应该非常小心。在许多情况下,这可能会导致死锁。 - svickawait
和Wait()
。 - kennyzx