【发布时间】:2012-10-24 09:09:20
【问题描述】:
考虑一下,
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中,您实际上是在返回并调用 Wait 从 .Delay() 方法返回的任务(我假设它返回一个Task)。在异步 lambda 中,您在Task task上调用 Wait。但是,我仍然没有解释。 -
您应该非常小心将
await与Wait()混合使用。在许多情况下,这可能会导致死锁。 -
@svick 发现了一个很棒的 example 将
await与Wait()混合在一起
标签: c# task-parallel-library async-await async-ctp