El segundo método, Task.Run
se ha introducido en una versión posterior del marco .NET (en .NET 4.5).
Sin embargo, el primer método Task.Factory.StartNew
le brinda la oportunidad de definir muchas cosas útiles sobre el hilo que desea crear, mientras Task.Run
que no proporciona esto.
Por ejemplo, supongamos que desea crear un hilo de tareas de larga ejecución. Si se va a utilizar un subproceso del conjunto de subprocesos para esta tarea, esto podría considerarse un abuso del conjunto de subprocesos.
Una cosa que podría hacer para evitar esto sería ejecutar la tarea en un hilo separado. Un subproceso recién creado que se dedicaría a esta tarea y se destruiría una vez que su tarea se hubiera completado. No puede lograr esto con el Task.Run
, mientras que puede hacerlo con el Task.Factory.StartNew
, como a continuación:
Task.Factory.StartNew(..., TaskCreationOptions.LongRunning);
Como se afirma aquí :
Entonces, en .NET Framework 4.5 Developer Preview, presentamos el nuevo método Task.Run. Esto de ninguna manera obsoleta Task.Factory.StartNew,
sino que simplemente debe considerarse como una forma rápida de usar
Task.Factory.StartNew sin necesidad de especificar un grupo de parámetros. Es un atajo. De hecho, Task.Run se implementa en términos de la misma lógica utilizada para Task.Factory.StartNew, simplemente pasando algunos parámetros predeterminados. Cuando pasa una Acción a Task.Run:
Task.Run(someAction);
eso es exactamente equivalente a:
Task.Factory.StartNew(someAction,
CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
StartNew
los usos predeterminados,TaskScheduler.Current
que pueden ser el grupo de subprocesos, pero también podrían ser el subproceso de la interfaz de usuario.