gpt4 book ai didi

c# - 我是否负责在使用 TaskCreationOptions.LongRunning 标志创建任务后进行清理?

转载 作者:太空狗 更新时间:2023-10-29 20:03:31 25 4
gpt4 key购买 nike

当您创建一个 Task 并指定 TaskCreationOptions.LongRunning 时,会专门为该任务创建一个新线程。如果您未指定 TaskCreationOptions.LongRunning,则使用线程池。

如果我错了请纠正我但是如果使用了线程池你不需要dispose()任务(只要你没有在任务中使用任何同步对象,比如Wait() 在子任务上)。

如果是这种情况,我是否负责清理使用 TaskCreationOptions.LongRunning 标志创建的额外线程?

如果是,则以下是可接受的模式:

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

task.ContinueWith(x => task.Dispose());

请注意,ContinueWith 没有 TaskContinuationOptions.LongRunning,因此它应该使用线程池。

话虽这么说,但是,我读到将任务状态移动到CompletedFaultedCancelled 的线程已经运行延续的高变化。

如果有人能对此有所启发,我将不胜感激。

最佳答案

绝对不要在延续中调用 Dispose() - 你打算什么时候处置延续任务?

AFAIK,Task 是一次性的唯一原因是清除等待任务时创建的等待句柄。如果您不等待任务,则永远不会创建等待句柄。无论如何,终结器最终都会清除。

此外,如果任务创建了一个新线程,它将自行清理。

关于c# - 我是否负责在使用 TaskCreationOptions.LongRunning 标志创建任务后进行清理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7754957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com