У меня есть список объектов, и я хотел бы перебрать этот список и запустить новый поток, проходящий в текущем объекте.
Я написал пример того, что, как я думал, должен это сделать, но он не работает. В частности, кажется, что потоки перезаписываются на каждой итерации. Это не имеет для меня никакого смысла, потому что я каждый раз создаю новый объект Thread.
Это тестовый код, который я написал
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; }
}
Выход на моем компьютере
test2
test2
но я ожидал, что это будет
test1
test2
Я попытался изменить строки потоков на
ThreadPool.QueueUserWorkItem(x => this.MyMethod(myObj));
но ни один из потоков не начал.
Я думаю, что у меня просто есть недоразумение о том, как потоки должны работать. Может ли кто-нибудь указать мне в правильном направлении и сказать мне, что я делаю неправильно?