C #: Warten, bis alle Threads abgeschlossen sind

Ich stoße im Code, den ich schreibe, auf ein gemeinsames Muster, in dem ich warten muss, bis alle Threads in einer Gruppe abgeschlossen sind, mit einer Zeitüberschreitung. Das Timeout soll die Zeit sein, die für @ benötigt wirall threads zu vervollständigen, also funktioniert es nicht, einfach thread.Join (timeout) für jeden Thread zu machen, da die mögliche Zeitüberschreitung dann timeout * numThreads ist.

Im Moment mache ich so etwas wie das Folgende:

var threadFinishEvents = new List<EventWaitHandle>();

foreach (DataObject data in dataList)
{
    // Create local variables for the thread delegate
    var threadFinish = new EventWaitHandle(false, EventResetMode.ManualReset);
    threadFinishEvents.Add(threadFinish);

    var localData = (DataObject) data.Clone();
    var thread = new Thread(
        delegate()
        {
            DoThreadStuff(localData);
            threadFinish.Set();
        }
    );
    thread.Start();
}

Mutex.WaitAll(threadFinishEvents.ToArray(), timeout);

Es scheint jedoch, dass es eine einfachere Sprache für diese Art von Dingen geben sollte.

Antworten auf die Frage(9)

Ihre Antwort auf die Frage