【问题标题】:How to delete Task correctly如何正确删除任务
【发布时间】:2012-10-03 08:13:19
【问题描述】:

我是否以某种方式删除了此任务或者它自毁了?

Task.Factory.StartNew(() => { DoSomeJob(); }, TaskCreationOptions.LongRunning);

或者像这样使用会更好

var t = Task.Factory.StartNew(() => { DoSomeJob(); }, TaskCreationOptions.LongRunning);

然后不知何故删除/无效化 t?

谢谢!

【问题讨论】:

标签: c# .net


【解决方案1】:

你不需要删除它,它最终会被丢弃....

【讨论】:

【解决方案2】:

垃圾收集将为您处理清理工作,您不必保留引用 t

【讨论】:

    【解决方案3】:

    如果你的意思是你可以取消它,或中止它,或以其他方式在它完成之前阻止它运行;不,不是真的(现在是这样)。您需要创建一个取消令牌源,将令牌传递给任务,然后任务中运行的方法需要定期检查以确保它没有被取消。

    您可以做的是等待一段时间并取消该等待操作。这将允许您继续运行您需要运行的“下一个”任务。请注意,如果您这样做了,而没有添加我上面讨论的任务本身检查删除的工作,那么该方法仍将运行到完成,您只需提前停止等待。

    Related link

    如果您只是担心清理任务运行后使用的资源,则无需担心。这一切都会自动处理。

    Related link

    【讨论】:

      【解决方案4】:

      如果您想尝试自己处理它,则必须小心。如果它仍然处于运行状态,你会得到这个异常:

      A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled)
      

      所以最好使用你的第一个例子。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-22
        • 2018-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-23
        • 2016-03-17
        相关资源
        最近更新 更多