Ich frage mich, ob Linq Erweiterungsmethoden atomar sind? Oder muss ich lock
irgendein IEnumerable
Objekt über Threads verwendet werden, vor jeder Art von Iteration?Sind IEnumerable Linq-Methoden Thread-sicher?
Hat die Deklaration der Variablen volatile
irgendwelche Auswirkungen auf diese?
Zusammenfassend, welche der folgenden ist die beste, Thread-sichere, Operation?
1- ohne Schleusung:
IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition
2- inklusive Schloss Aussagen:
IEnumerable<T> _objs = //...
lock(_objs)
{
var foo = _objs.FirstOrDefault(t => // some condition
}
3- Deklarieren Variable als flüchtiges:
volatile IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition
Sie sind nicht threadsicher. Siehe http://stackoverflow.com/questions/9995266/how-to-create-a-thread-safe-generic-list – stuartd