Digamos que desea iniciar algunos subprocesos de trabajo para llevar a cabo algún tipo de cálculo, y luego hacer algo después con todos los resultados.
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());
Oh, sí, y no utilice aleatoria de esa manera, sólo estaba tratando de escribir un ejemplo mínimo, de fácil comprensión. Al final no es realmente aleatorio si crea nuevas instancias aleatorias demasiado cercanas en el tiempo, ya que la semilla se basa en el reloj.
Es necesario añadir algo así como 'int value = i;' en el foor-loop antes de iniciar un nuevo Thread. Porque 'yo' puede estar aumentando antes de que comience un hilo y la suma no será determinista. –