Считается ли допустимым не вызывать Dispose () для объекта TPL Task?

Я хочу запустить задачу для выполнения в фоновом потоке. Я не хочу ждать завершения задач.

В .net 3.5 я бы сделал это:

ThreadPool.QueueUserWorkItem(d => { DoSomething(); });

В .net 4 TPL - рекомендуемый способ. Рекомендуемая общая схема:

Task.Factory.StartNew(() => { DoSomething(); });

Тем не менееStartNew() метод возвращаетTask объект, который реализуетIDisposable, Кажется, это упускают из виду люди, которые рекомендуют этот шаблон. Документация MSDN поTask.Dispose() Метод говорит:

«Всегда вызывайте Dispose, прежде чем выпускать свою последнюю ссылку на задачу».

Вы не можете вызывать dispose для задачи, пока она не будет завершена, поэтому ожидание основного потока и вызов dispose в первую очередь лишат смысла работу с фоновым потоком. Также, похоже, нет завершенного / завершенного события, которое можно было бы использовать для очистки.

Страница MSDN в классе Task не комментирует это, а книга "Pro C # 2010 ..." рекомендует тот же шаблон и не комментирует удаление задач.

Я знаю, если я просто оставлю это, финализатор поймает его в конце, но собирается ли он вернуться и укусить меня, когда я делаю много огня и забываю подобные задачи, и поток финализатора перегружен?

Итак, мои вопросы:

Это приемлемо, чтобы не звонитьDispose() наTask класс в этом случае? И если да, то почему и есть ли риски / последствия?Есть ли документация, которая обсуждает это?Или есть подходящий способ избавления отTask объект, который я пропустил?Или есть другой способ сделать огонь и забыть задачи с TPL?

Ответы на вопрос(3)

Ваш ответ на вопрос