Tôi tự hỏi, nếu phương pháp mở rộng LINQ là nguyên tử? Hoặc tôi có cần lock
bất kỳ đối tượng IEnumerable
nào được sử dụng trên các chuỗi, trước bất kỳ loại lặp nào không?Phương pháp Linn IEnumerable Linq có an toàn không?
Tuyên bố biến là volatile
có ảnh hưởng gì đến điều này không?
Tóm lại, thao tác nào sau đây là tốt nhất, an toàn luồng, hoạt động?
1- Nếu không có bất kỳ khóa:
IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition
2- Bao gồm báo cáo khóa:
IEnumerable<T> _objs = //...
lock(_objs)
{
var foo = _objs.FirstOrDefault(t => // some condition
}
3- Tuyên bố biến như dễ bay hơi:
volatile IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition
Chúng không phải là chủ đề an toàn. Xem http://stackoverflow.com/questions/9995266/how-to-create-a-thread-safe-generic-list – stuartd