Wie viel Ordnung brauchen Sie an den Fäden zu verhängen? Wenn Sie nur die gesamte in der Schleife gestartete Arbeit beenden müssen, bevor der Code fortgesetzt wird, die Reihenfolge, in der die Arbeit innerhalb der Schleife beendet wird, ist Ihnen jedoch egal, dann ist der Aufruf von Join die Antwort. Um weitere Details zu Kevin Kenny's answer, hinzuzufügen, sollten Sie die Verbindung außerhalb der Schleife aufrufen. Dies bedeutet, dass Sie eine Sammlung benötigen Verweise auf die Themen zu halten Sie den Start:
// Start all of the threads.
List<Thread> startedThreads = new List<Thread>();
foreach (...) {
Thread thread = new Thread(new ThreadStart(MyMethod));
thread.Start();
startedThreads.Add(thread);
}
// Wait for all of the threads to finish.
foreach (Thread thread in startedThreads) {
thread.Join();
}
Im Gegensatz dazu, wenn Sie innerhalb der Schleife Join genannt, würde im Grunde das Ergebnis das gleiche sein wie keine Threads überhaupt verwendet wird. Jede Iteration des Schleifenkörpers würde einen Thread erstellen und starten, aber dann sofort mitmachen und darauf warten, dass er beendet wird.
Wenn die einzelnen Threads ein Ergebnis erzeugen (z. B. eine Nachricht in ein Protokoll schreiben), werden die Nachrichten möglicherweise immer noch in der falschen Reihenfolge angezeigt, da zwischen den Threads keine Koordination besteht. Es ist möglich, dass die Threads ihre Ergebnisse in der Reihenfolge ausgeben, indem sie sie mit einem Monitor koordinieren.