Задача.Фабрика.StartNew против новой задачи


кто-нибудь знает, есть ли разница между Task.Factory.StartNew vs new Task с последующим вызовом Start на задач. Глядя на отражатель, кажется, что нет большой разницы. Так что, пожалуй, единственная разница в том, что Task.Factory.StartNewвозвращает задачу, которая уже началась. Это правильно?

Я знаю, что Task.Factory.StartNewи Task.Run имеют различные параметры по умолчанию и Task.Run является предпочтительным вариантом для .Net 4.5.

2   51   2014-02-28 09:28:44

2 ответа:

нашел этой отличная статья Стивена Тоуба, в которой объясняется, что на самом деле существует штраф за производительность при использовании new Task(...).Start(), поскольку метод start должен использовать синхронизацию, чтобы убедиться, что задача запланирована только один раз.

его совет-предпочесть использовать Task.Factory.StartNew для .net версии 4.0. Для .нетто 4.5 Task.Run и оптимальный вариант.

на самом деле в статья Стивена Туба он указывает эту задачу.Run () в точности эквивалентно использованию задачи.Фабрика.StartNew() с параметрами по умолчанию:

Task.Factory.StartNew(someAction, 
CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);