考虑一下,
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();
最佳答案
在您的 lambda 示例中,当您调用 task.Wait()
时,您正在等待您构建的新任务,而不是它返回的延迟任务。要获得所需的延迟,您还需要等待生成的任务:
Task<Task> task = new Task<Task>(async () => {
await Task.Delay(1000);
});
task.Start();
task.Wait();
task.Result.Wait();
您可以避免构建新任务,而只处理一个任务而不是两个任务:
Func<Task> task = async () => {
await TaskEx.Delay(1000);
};
task().Wait();
关于c# - 无法等待异步 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13046096/