Являются ли методы IEnumerable Linq потокобезопасными?

Интересно, являются ли методы расширения Linq атомарными? Или мне нужно заблокироватьлюбой объект IEnumerable, используемый в потоках, перед любой итерацией?

Влияет ли на это объявление переменной как volatile?

Подводя итог, какая из следующих операций является наилучшей, потокобезопасной?

1- Без каких-либо блокировок:

IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition

2- Включая операторы блокировки:

IEnumerable<T> _objs = //...
lock(_objs)
{
    var foo = _objs.FirstOrDefault(t => // some condition
}

3- Объявление переменной как volatile:

volatile IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition
20
задан Kamyar Nazeri 19 June 2012 в 15:01
поделиться