【问题标题】:C# Waiting and Disposing of TasksC# 等待和处理任务
【发布时间】:2012-03-22 14:53:01
【问题描述】:


我一直在查看this article 关于在 C# 中使用任务的信息,如果有人可以为我清理一些东西,我正在徘徊?
在任务上调用等待不会破坏创建任务的目的,因为它不会冻结主线程,因为现在主线程必须等待任务完成。
但是我假设不会立即调用等待,所以现在你什么时候调用它,或者你怎么知道什么时候处理任务。 假设我们有一个这样的简单案例:

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

如果你立即调用 t.Wait() ,主线程仍然会等待 5 秒才能执行任何其他操作,从用户的角度来看,这有点违背了目的,他们将无法在 5 内执行任何操作秒。您怎么知道 5 秒后该任务已完成?你可以处理 t?什么是正确的处理方法?
对不起,如果这个问题真的很幼稚:( 谢谢大家:D

【问题讨论】:

    标签: c# task


    【解决方案1】:

    您可能永远不会在这样的 single 任务上从 UI 线程调用 Wait - 正如您所说,重点不是阻塞 UI 线程。事实上,等待来自 UI 线程的任何任务都是一个问题。

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

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

    【讨论】:

    • Ahhh true :D 谢谢 :D 这也意味着 C# GC 将处理任务并清理它。无需调用 .Dispose()。
    • @Heinrich:如果你的任务中不使用任何事件句柄,你不必担心调用Dispose,另见stackoverflow.com/questions/3734280/…
    猜你喜欢
    • 2013-11-19
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多