如何正确删除任务

时间:2012-10-12 13:37:47

标签: c# .net

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

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

或者最好像

一样使用它
var t = Task.Factory.StartNew(() => { DoSomeJob(); }, TaskCreationOptions.LongRunning);

稍后删除/取消 t?

谢谢!

4 个答案:

答案 0 :(得分:5)

你不需要删除它,它最终会被处理....

答案 1 :(得分:3)

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

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

Related link

如果您只是担心清理任务运行完毕后所使用的资源,则无需担心。它将全部自动处理。

Related link

答案 2 :(得分:2)

如果你想尝试自己处理它,你必须要小心。如果它仍处于运行状态,您将收到此异常:

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

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

答案 3 :(得分:1)

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