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