Допустим, вы хотите запустить несколько рабочих потоков для выполнения каких-либо вычислений, а затем сделать что-то после этого со всеми результатами.
List<Thread> workerThreads = new List<Thread>();
List<int> results = new List<int>();
for (int i = 0; i < 5; i++) {
Thread thread = new Thread(() => {
Thread.Sleep(new Random().Next(1000, 5000));
lock (results) {
results.Add(new Random().Next(1, 10));
}
});
workerThreads.Add(thread);
thread.Start();
}
// Wait for all the threads to finish so that the results list is populated.
// If a thread is already finished when Join is called, Join will return immediately.
foreach (Thread thread in workerThreads) {
thread.Join();
}
Debug.WriteLine("Sum of results: " + results.Sum());
О да, и не используйте Random таким образом, я просто пытался написать минимальный, легко понятный пример. В конечном итоге он не будет случайным, если вы создадите новые случайные экземпляры слишком близко по времени, поскольку начальное число основано на часах.