我一直在看this article关于在C#中使用任务的问题,如果有人可以为我清理一些东西,我就会徘徊?
不调用等待任务会失败创建任务的目的,因为无论如何都不会冻结主线程,因为现在主线程必须等待任务完成。我假设不会立即调用等待,所以现在你什么时候打电话或者你怎么知道什么时候处理这个任务。
假设我们有一个这样的简单案例:
void MyFunction()
{
Task t = Task.Factory.StartNew(() => { System.Threading.Thread.Sleep(5000); });
}
如果你直接调用t.Wait(),主线程仍然会等待5秒才能做其他事情,从用户的角度来看有点失败的目的,他们将无法为5做任何事情秒。你怎么知道5秒后任务完成了?你可以处理t?处理这个问题的正确方法是什么?
对不起,如果问题真的很天真:(
谢谢大家:D
答案 0 :(得分:6)
你可能永远不会从UI线程上这样的单个任务上调用Wait
- 正如你所说的那样,整点都没有阻止UI线程。实际上,从UI线程等待任何任务都是一个问题。
等待任务完成可能对同步多个任务并返回合并结果有用 - 例如想象两个同时在priceline和expedia上执行酒店查询的任务,以及产生两个任务的线程(例如后台线程)等待两者的结果并组合结果以按价格订购两个站点上的可用酒店。
然后,可以将查询的最终结果发送回UI线程,通常是通过执行回调或引发事件。