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