Perché SynchronizedCollection<T>
non acquisisce un blocco su SyncObj in esplicita attuazione IEnumerable.GetEnumerator()
Perché SynchronizedCollection <T> non si blocca sul IEnumerable.GetEnumerator()
IEnumerator IEnumerable.GetEnumerator()
{
return this.items.GetEnumerator();
}
implementazione implicita non acquisire un blocco sulla SyncOb (verificato da riflettore).
Potrebbe essere un problema durante il ciclo foreach su questa raccolta. Un thread potrebbe aver acquisito un blocco e l'altro potrebbe provare a leggerlo utilizzando foreach?
Penso che quello a cui si riferisce sia il fatto che l'implementazione implicita di GetEnumerator() chiama effettivamente lock. – user7116
Effettivamente. Sciocco, non c'è niente che debba essere bloccato. Il riferimento all'elenco interno non può cambiare, solo il suo contenuto. L'iteratore memorizza solo il riferimento elenco. –
Credo che dovrebbe perché una chiamata a 'GetEnumerator()' alla fine crea un nuovo 'Enumeratore' che si basa sul campo 'Lista ._versione'. –
user7116