Junior — Middle
Wie wird der Mechanismus zur Warten auf die Beendigung von Aufgaben innerhalb des Thread-Pools implementiert?
sobes.tech KI
Antwort von AI
In C# wird der Mechanismus zum Warten auf die Beendigung von Aufgaben innerhalb eines Thread-Pools in der Regel mit der Klasse Task und Synchronisationsmethoden wie Task.Wait(), Task.WaitAll() oder Task.WhenAll() implementiert.
Wenn Aufgaben in einem Thread-Pool über Task.Run oder ThreadPool.QueueUserWorkItem gestartet werden, kann man auf deren Abschluss warten, indem man aufruft:
Task[] tasks = new Task[3];
tasks[0] = Task.Run(() => { /* Arbeit */ });
tasks[1] = Task.Run(() => { /* Arbeit */ });
tasks[2] = Task.Run(() => { /* Arbeit */ });
// Warten auf Abschluss aller Aufgaben
Task.WaitAll(tasks);
Wenn direkt ThreadPool verwendet wird, kann man ManualResetEvent oder CountdownEvent verwenden, um zu warten:
CountdownEvent countdown = new CountdownEvent(3);
for (int i = 0; i < 3; i++)
{
ThreadPool.QueueUserWorkItem(_ => {
// Arbeit
countdown.Signal(); // Zähler verringern
});
}
// Warten auf Abschluss aller Aufgaben
countdown.Wait();
Auf diese Weise basiert der Warmechanismus auf Thread-Synchronisation und der Verwendung spezieller Methoden und Klassen, um den aktuellen Thread bis zum Abschluss aller gestarteten Aufgaben zu blockieren.