c# - 创建任务并“等待”它与同步运行某些东西或等待异步方法相同吗?
问题描述
如果在 UI 线程上运行,以下代码块是否等效?
var task = Task.Run(async () => { await DoSomething(); });
task.Wait();
对比
await DoSomething(); //Or DoSomething.Wait();
解决方案
如果在 UI 线程上运行,以下代码块是否等效?
不,他们不是。第一个会阻塞UI Thread / Message Pump,第二个不会。
第一个是尝试同步async
运行一个方法,并且会失败任何理智的代码审查(除了最罕见的情况外)。第一个示例应更改为第二个示例恕我直言
创建一个任务并“等待”它和同步运行一样吗?
如果将同步代码定义为“按顺序排列的一堆语句;那么代码中的每条语句都是一个接一个地执行,等待之前没有代码”。然后你可以提出这个要求。
但是,如果你做这样的事情,那么没有
var task = Task.Run(SomeAwesomeTask);
// lots more code here
task.Wait();
推荐阅读
- multithreading - 玩 Scala 和线程安全
- nginx - 使用 nginx 强制相对 URI
- react-native - React Native - 警报组件方法中的“类型”是什么意思?
- c# - 将格式化值从 DataGridView 插入到数据库
- c# - 串行监视器、DataReceived 处理程序误解 C#、WPF
- java - 如何防止 Hibernate 在刷新时覆盖版本字段?
- android - 如何将数据从第一个活动显示到另一个活动或片段?
- jasper-reports - 在 Jasper 报告中使用多个数据源
- c# - 检测输入了哪个对撞机
- python - 构建子图