Métodos IEnumerable Linq são thread-safe?
Gostaria de saber se os métodos de extensão do Linq são atômicos? Ou eu precisolock
qualquerIEnumerable
objeto usado em threads, antes de qualquer tipo de iteração?
Declarando a variável comovolatile
tem algum efeito sobre isso?
Para resumir, qual das seguintes opções é a melhor operação segura?
1- Sem bloqueios:
IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition
2- Incluindo instruções de bloqueio:
IEnumerable<T> _objs = //...
lock(_objs)
{
var foo = _objs.FirstOrDefault(t => // some condition
}
3- Declarando variável como volátil:
volatile IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition