Являются ли методы IEnumerable Linq поточно-ориентированными?
Интересно, являются ли методы расширения Linq атомарными? Или мне нужноlock
любойIEnumerable
Объект используется в потоках, перед любой итерацией?
Объявляет переменную какvolatile
иметь какое-либо влияние на это?
Подводя итог, какая из следующих операций является лучшей, поточно-ориентированной операцией?
1- Without any locks:
IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition
2- Including lock statements:
IEnumerable<T> _objs = //...
lock(_objs)
{
var foo = _objs.FirstOrDefault(t => // some condition
}
3- Declaring variable as volatile:
volatile IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition