Quanto ordine avete bisogno di imporre i fili? Se hai solo bisogno che tutto il lavoro iniziato nel ciclo finisca prima che il codice continui, ma non ti interessa l'ordine in cui termina il lavoro all'interno del ciclo, chiamare Join è la risposta. Per aggiungere ulteriori dettagli a Kevin Kenny's answer,, è necessario chiamare Join all'esterno del ciclo. Questo significa che sarà necessario un insieme di tenere i riferimenti ai fili iniziare:
// 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();
}
Al contrario, se si chiama Partecipa all'interno del ciclo, il risultato sarebbe fondamentalmente lo stesso che non utilizzando thread affatto. Ogni iterazione del corpo del loop creerebbe e avvierà una discussione, ma immediatamente la unirà e attenderà che finisca.
Se i singoli thread producono dei risultati (scrivere un messaggio in un registro, ad esempio), i messaggi potrebbero ancora apparire fuori ordine perché non c'è coordinamento tra i thread. È possibile ottenere i thread per produrre i risultati in ordine coordinandoli con un monitor.
fonte
2008-08-10 08:37:28