Junior — Middle
¿Cómo se implementa el mecanismo de espera para la finalización de tareas dentro del grupo de hilos?
sobes.tech AI
Respuesta de la IA
En C#, el mecanismo de espera para la finalización de tareas dentro de un grupo de hilos generalmente se implementa mediante la clase Task y métodos de sincronización, como Task.Wait(), Task.WaitAll() o Task.WhenAll().
Cuando las tareas se inician en un grupo de hilos mediante Task.Run o ThreadPool.QueueUserWorkItem, se puede esperar a que finalicen llamando a:
Task[] tasks = new Task[3];
tasks[0] = Task.Run(() => { /* trabajo */ });
tasks[1] = Task.Run(() => { /* trabajo */ });
tasks[2] = Task.Run(() => { /* trabajo */ });
// Esperar a que todas las tareas finalicen
Task.WaitAll(tasks);
Si se usa ThreadPool directamente, se puede aplicar ManualResetEvent o CountdownEvent para esperar:
CountdownEvent countdown = new CountdownEvent(3);
for (int i = 0; i < 3; i++)
{
ThreadPool.QueueUserWorkItem(_ => {
// trabajo
countdown.Signal(); // disminuir el contador
});
}
// Esperar a que todas las tareas finalicen
countdown.Wait();
De esta forma, el mecanismo de espera se basa en la sincronización de hilos y en el uso de métodos y clases especiales para bloquear el hilo actual hasta que todas las tareas en ejecución hayan finalizado.