Когда вы создаете Task
при указании TaskCreationOptions.LongRunning
, новый поток создается специально для этой задачи. Если вы не укажете TaskCreationOptions.LongRunning
, то будет использоваться пул потоков.
Пожалуйста, поправьте меня, если я ошибаюсь, но если используется пул потоков, вам не нужно dispose ()
задачу (если вы не использовали какие-либо объекты синхронизации внутри задачи, например Wait ()
для дочерней задачи).
Если это так, отвечаю ли я за очистку лишнего потока, созданного с помощью флага TaskCreationOptions.LongRunning
?
Если да, то приемлемым шаблоном является следующий:
var task = Task.Factory.StartNew(() => {...}, TaskCreationOptions.LongRunning);
task.ContinueWith(x => task.Dispose());
Обратите внимание, как , ContinueWith
не имеет TaskContinuationOptions.LongRunning
, поэтому он должен использовать пул потоков.
При этом, однако, я читал, что поток, который перемещает состояние задачи в Завершено
, Сбой
или Отменено
, сильно изменился. запуска продолжения.
Если бы кто-то мог пролить свет на это, я был бы очень признателен.