5

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

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

或者最好像这样使用它

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

并以某种方式稍后删除/取消t?

谢谢!

4

4 回答 4

6

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

于 2012-10-12T13:40:47.767 回答
3

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

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

相关链接

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

相关链接

于 2012-10-12T13:43:03.773 回答
2

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

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

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

于 2012-10-12T13:43:15.093 回答
1

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

于 2012-10-12T13:41:15.037 回答