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