C#等待和处理任务

时间:2012-03-05 04:01:18

标签: c# task


我一直在看this article关于在C#中使用任务的问题,如果有人可以为我清理一些东西,我就会徘徊?
不调用等待任务会失败创建任务的目的,因为无论如何都不会冻结主线程,因为现在主线程必须等待任务完成。我假设不会立即调用等待,所以现在你什么时候打电话或者你怎么知道什么时候处理这​​个任务。 假设我们有一个这样的简单案例:

    void MyFunction()
    {
        Task t = Task.Factory.StartNew(() => { System.Threading.Thread.Sleep(5000); });
    }

如果你直接调用t.Wait(),主线程仍然会等待5秒才能做其他事情,从用户的角度来看有点失败的目的,他们将无法为5做任何事情秒。你怎么知道5秒后任务完成了?你可以处理t?处理这个问题的正确方法是什么?
对不起,如果问题真的很天真:( 谢谢大家:D

1 个答案:

答案 0 :(得分:6)

你可能永远不会从UI线程上这样的单个任务上调用Wait - 正如你所说的那样,整点都没有阻止UI线程。实际上,从UI线程等待任何任务都是一个问题。

等待任务完成可能对同步多个任务并返回合并结果有用 - 例如想象两个同时在priceline和expedia上执行酒店查询的任务,以及产生两个任务的线程(例如后台线程)等待两者的结果并组合结果以按价格订购两个站点上的可用酒店。

然后,可以将查询的最终结果发送回UI线程,通常是通过执行回调或引发事件。