Отвечаю ли я за очистку после Задачи, созданной с помощью флага TaskCreationOptions.LongRunning?

Когда вы создаете Task при указании TaskCreationOptions.LongRunning , новый поток создается специально для этой задачи. Если вы не укажете TaskCreationOptions.LongRunning , то будет использоваться пул потоков.

Пожалуйста, поправьте меня, если я ошибаюсь, но если используется пул потоков, вам не нужно dispose () задачу (если вы не использовали какие-либо объекты синхронизации внутри задачи, например Wait () для дочерней задачи).

Если это так, отвечаю ли я за очистку лишнего потока, созданного с помощью флага TaskCreationOptions.LongRunning ?

Если да, то приемлемым шаблоном является следующий:

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

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

Обратите внимание, как , ContinueWith не имеет TaskContinuationOptions.LongRunning , поэтому он должен использовать пул потоков.

При этом, однако, я читал, что поток, который перемещает состояние задачи в Завершено , Сбой или Отменено , сильно изменился. запуска продолжения.

Если бы кто-то мог пролить свет на это, я был бы очень признателен.

7
задан InvertedAcceleration 18 October 2011 в 10:37
поделиться