Czy metody IEnumerable Linq są bezpieczne dla wątków?
Zastanawiam się, czy metody rozszerzenia Linq są atomowe? Czy muszę to zrobić?lock
każdyIEnumerable
obiekt używany w wątkach, przed jakąkolwiek iteracją?
Czy deklaruje zmienną jakovolatile
mieć na to jakiś wpływ?
Podsumowując, która z poniższych jest najlepsza, bezpieczna w wątku, operacja?
1- Bez żadnych zamków:
IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition
2- W tym instrukcje blokady:
IEnumerable<T> _objs = //...
lock(_objs)
{
var foo = _objs.FirstOrDefault(t => // some condition
}
3- Deklarowanie zmiennej jako lotnej:
volatile IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition