Estoy aprendiendo sobre las nuevas bibliotecas Threading y Parallel en .Net 4
En el pasado, crearía un nuevo hilo como este (como ejemplo):
DataInThread = new Thread(new ThreadStart(ThreadProcedure));
DataInThread.IsBackground = true;
DataInThread.Start();
Ahora puedo hacer:
Task t = Task.Factory.StartNew(() =>
{
ThreadProcedure();
});
¿Cuál es la diferencia, si la hay?
Gracias
Respuestas:
Existe una gran diferencia. Las tareas están programadas en ThreadPool e incluso podrían ejecutarse de forma síncrona si fuera apropiado.
Si tiene un trabajo en segundo plano de larga duración, debe especificarlo utilizando la opción de tarea correcta.
Debería preferir Task Parallel Library sobre el manejo explícito de subprocesos, ya que está más optimizado. También tienes más funciones como Continuación.
fuente
La tarea le brinda todas las bondades de la API de tareas:
Task.ContinueWith
)Tenga en cuenta que en ambos casos puede hacer que su código sea un poco más simple con conversiones de grupos de métodos:
fuente
Thread
es de muy bajo nivel en comparación conTask
(tengo una publicación de blog que entra en detalles). Estoy dando una charla sobre " cómo usar Tareas en el mundo real" en Grand Rapids DevDay . La charla se llama "Thread is Dead", porque ya no es necesarioThread
(a menos que esté implementando aTaskScheduler
).Thread
está muerto, cuando se trata de ser utilizado como hilo de fondo.Thread
pueda hacer (oBackgroundWorker
) que no se pueda hacer de forma más eleganteTask
y apropiadaTaskScheduler
.Thread
?Task
para ejecutarse en un hilo específico, a continuación, utilizar un apropiadoTaskScheduler
- por ejemplo,AsyncContextThread
. Sin embargo, esto generalmente no es necesario; elSynchronizationContext
,ThreadPool
, yConcurrentExclusiveSchedulerPair
los programadores son suficientes para la mayoría de los programas.En el primer caso, simplemente está iniciando un nuevo hilo, mientras que en el segundo caso está entrando en el grupo de hilos.
El trabajo del grupo de subprocesos es compartir y reciclar subprocesos. Permite evitar perder unos milisegundos cada vez que necesitamos crear un nuevo hilo.
Hay varias formas de ingresar al grupo de subprocesos:
fuente
Su primer bloque de código le dice a CLR que cree un subproceso (digamos. T) para usted, que se puede ejecutar como fondo (use subprocesos del grupo de subprocesos al programar T). En resumen, le pide explícitamente a CLR que cree un hilo para que usted haga algo y llame al método Start () en el hilo para comenzar.
Su segundo bloque de código hace lo mismo pero delega (implícitamente traspaso) la responsabilidad de crear el hilo (en segundo plano, que de nuevo se ejecuta en el grupo de hilos) y el hilo de inicio a través del método StartNew en la implementación de Task Factory.
Esta es una diferencia rápida entre los bloques de código dados. Habiendo dicho eso, hay pocas diferencias detalladas que puede buscar en Google o ver otras respuestas de mis compañeros colaboradores.
fuente