Tengo una lista de objetos y me gustaría pasar por encima de esa lista y comenzar un nuevo hilo, pasando el objeto actual.Inicio de un nuevo hilo en un bucle foreach
He escrito un ejemplo de lo que pensé que debería hacer esto, pero no está funcionando. Específicamente, parece que los hilos se sobrescriben en cada iteración. Sin embargo, esto realmente no tiene sentido para mí porque estoy creando un nuevo objeto Thread cada vez.
Este es el código de prueba que escribí
class Program
{
static void Main(string[] args)
{
TestClass t = new TestClass();
t.ThreadingMethod();
}
}
class TestClass
{
public void ThreadingMethod()
{
var myList = new List<MyClass> { new MyClass("test1"), new MyClass("test2") };
foreach(MyClass myObj in myList)
{
Thread myThread = new Thread(() => this.MyMethod(myObj));
myThread.Start();
}
}
public void MyMethod(MyClass myObj) { Console.WriteLine(myObj.prop1); }
}
class MyClass
{
public string prop1 { get; set; }
public MyClass(string input) { this.prop1 = input; }
}
La salida en mi máquina es
test2
test2
pero yo esperaba que fuera
test1
test2
He intentado cambiar las líneas de hilo a
ThreadPool.QueueUserWorkItem(x => this.MyMethod(myObj));
pero ninguno de los hilos se inició.
Creo que tengo un malentendido acerca de cómo se supone que los hilos funcionan. ¿Puede alguien señalarme en la dirección correcta y decirme qué estoy haciendo mal?
Su vida será mucho más fácil si consulta la Biblioteca de Extensiones Paralelas presentada en .Net 3.5. Aquí hay un lugar para comenzar: http://msdn.microsoft.com/en-us/library/dd460693%28VS.100%29.aspx – DOK
http://www.albahari.com/threading/ –