Sobes.tech
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.