Inv*_*ion 7 .net c# task-parallel-library
当您创建Taskwhile时,指定TaskCreationOptions.LongRunning专门为该任务创建的新线程.如果未指定,TaskCreationOptions.LongRunning则使用线程池.
如果我错了,请纠正我,但如果使用了线程池,则不需要dispose()任务(只要你没有在任务中使用任何同步对象,比如Wait()在子任务上).
如果是这种情况,我是否负责清理使用该TaskCreationOptions.LongRunning标志创建的额外线程?
如果是,则以下是可接受的模式:
var task = Task.Factory.StartNew(() => {...}, TaskCreationOptions.LongRunning);
task.ContinueWith(x => task.Dispose());
Run Code Online (Sandbox Code Playgroud)
注意如何,ContinueWith没有TaskContinuationOptions.LongRunning,所以它应该使用线程池.
尽管如此,我已经读过将任务状态移动到的线程Completed,Faulted或者Cancelled运行延续的更改.
如果有人能够对此有所启发,我将非常感激.
绝对不要Dispose()继续 - 你什么时候处理继续任务?
AFAIK,唯一的原因Task是一次性是清除等待任务时创建的等待句柄.如果您不等待任务,则永远不会创建等待句柄.无论如何,终结者最终会清理.
此外,如果任务创建了一个新线程,它将自行清理.
TaskContinuationOptions.LongRunning是对任务工厂/调度程序的提示,事情并没有像你描绘的那样固定.
我希望在ContinueWith同一个(longRunning)线程上执行,可能会也可能不会在ThreadPool上运行.
据我所知,任务的清理是自动的,所以我不打算在这里使用Dispose().