首页 > 解决方案 > 创建任务并“等待”它与同步运行某些东西或等待异步方法相同吗?

问题描述

如果在 UI 线程上运行,以下代码块是否等效?

var task = Task.Run(async () => { await DoSomething(); });
task.Wait();

对比

await DoSomething(); //Or DoSomething.Wait();

标签: c#async-await

解决方案


如果在 UI 线程上运行,以下代码块是否等效?

不,他们不是。第一个会阻塞UI Thread / Message Pump,第二个不会。

第一个是尝试同步async运行一个方法,并且会失败任何理智的代码审查(除了最罕见的情况外)。第一个示例应更改为第二个示例恕我直言

创建一个任务并“等待”它和同步运行一样吗?

如果将同步代码定义为“按顺序排列的一堆语句;那么代码中的每条语句都是一个接一个地执行,等待之前没有代码”。然后你可以提出这个要求。

但是,如果你做这样的事情,那么没有

var task = Task.Run(SomeAwesomeTask);

// lots more code here

task.Wait();

推荐阅读