2012-10-06 25 views

Respuesta

10

Desde Task s utilizan el subyacente ThreadPool (a menos marcado como carreras de larga), que es una mala idea usarlas siempre que use un ThreadPool no se recomienda, por ejemplo,

  • operaciones de E/S largas que obstruyen la cola de tareas y evitan que se ejecuten otras tareas.
  • realizando operaciones que requieren la identidad de subprocesos como la configuración de afinidad.
+1

La afinidad de subprocesos es un punto muy bueno, aunque rara vez aparece. –

+0

+1 por mencionar IO de larga ejecución. –

+4

Recomiendo seguir usando tareas para operaciones de larga duración, siempre que las marque LongRunning. –

6

Esto se ha ido en detalles aquí: Should I notice a difference in using Task vs Threads in .Net 4.0?

Esta diferencia más grande es que el TaskFactory utiliza conjunto de hilos, por lo que si usted tiene un montón de tareas que no se inicie inmediatamente. Deben esperar a que se ejecute un hilo gratis. En la mayoría de los casos esto es aceptable.

Los hilos se ejecutarán instantáneamente tan pronto como se llame a .Start(), si el hardware lo permite.

Suponiendo que la agrupación de subprocesos está bien, las tareas ofrecen muchos beneficios, incluyendo la cancelación, ContinueWith, OnSuccess, OnError, Exception aggregation y WaitAll, por nombrar algunos de los más importantes.

+1

Los hilos estarán listos instantáneamente tan pronto como se llame .Start(). Se ejecutarán cuando haya un núcleo disponible, que a menudo es 'instantáneo'. –

+0

Buen punto, debo aclarar que los hilos son hardware limitado mientras que las tareas son software limitado. – Dharun

+0

Gracias Dharun. La publicación del blog parece tener una buena comparación de varios enfoques también. http://nitoprograms.blogspot.ca/2010/08/various-implementations-of-asynchronous.html – imak

Cuestiones relacionadas