我是否以某种方式删除了此任务,或者它是自毁的?
Task.Factory.StartNew(() => { DoSomeJob(); }, TaskCreationOptions.LongRunning);
或者最好像
一样使用它var t = Task.Factory.StartNew(() => { DoSomeJob(); }, TaskCreationOptions.LongRunning);
稍后删除/取消 t?
谢谢!
答案 0 :(得分:5)
你不需要删除它,它最终会被处理....
答案 1 :(得分:3)
如果你的意思是你可以取消它,或者中止它,或以其他方式阻止它在它完成之前运行;不,不是真的(就像现在一样)。您需要创建取消令牌源,将令牌传递给任务,然后在任务中运行的方法需要定期检查以确保它没有被取消。
您可以做的是等待一段时间并取消等待操作。这将允许您继续运行您需要运行的“下一个”任务。请注意,如果你这样做,没有添加上面讨论的任务本身的方法检查删除的工作,那么该方法仍将运行完成,你只是停止等待它。
如果您只是担心清理任务运行完毕后所使用的资源,则无需担心。它将全部自动处理。
答案 2 :(得分:2)
如果你想尝试自己处理它,你必须要小心。如果它仍处于运行状态,您将收到此异常:
A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled)
所以最好使用你的第一个例子。
答案 3 :(得分:1)
垃圾收集将为您处理清理工作,您无需保留引用t
。