Trong hai đoạn mã sau, đoạn đầu tiên là an toàn hay bạn phải làm đoạn thứ hai?
Ý tôi là mỗi luồng có được đảm bảo gọi phương thức trên Foo từ cùng một lần lặp vòng lặp mà luồng được tạo không?
Hay bạn phải sao chép tham chiếu đến một biến mới "cục bộ" cho mỗi lần lặp của vòng lặp?
var threads = new List<Thread>();
foreach (Foo f in ListOfFoo)
{
Thread thread = new Thread(() => f.DoSomething());
threads.Add(thread);
thread.Start();
}
-
var threads = new List<Thread>();
foreach (Foo f in ListOfFoo)
{
Foo f2 = f;
Thread thread = new Thread(() => f2.DoSomething());
threads.Add(thread);
thread.Start();
}
Cập nhật: Như đã chỉ ra trong câu trả lời của Jon Skeet, điều này không liên quan cụ thể đến luồng.