Sind IEnumerable Linq-Methoden threadsicher?

Ich frage mich, ob Linq-Erweiterungsmethoden atomar sind. Oder muss ichlock irgendeinIEnumerable Objekt verwendet über Threads, vor einer Art von Iteration?

Deklariert die Variable alsvolatile Haben Sie einen Einfluss darauf?

Zusammenfassend lässt sich sagen, welcher der folgenden Vorgänge ist der beste, thread-sichere Vorgang?

1- Ohne irgendwelche Schlösser:

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

2- Einschließlich Lock-Anweisungen:

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

3- Variable als flüchtig deklarieren:

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage