Por qué SynchronizedCollection<T>
no adquiera un bloqueo en SyncObj en la implementación explícita de IEnumerable.GetEnumerator()
SynchronizedCollection <T> no se bloquea en IEnumerable.GetEnumerator()
IEnumerator IEnumerable.GetEnumerator()
{
return this.items.GetEnumerator();
}
aplicación implícito no adquirir un bloqueo en SyncOb (verificado por el reflector).
Podría haber un problema durante el ciclo foreach en esta colección. ¿Un hilo podría haber adquirido un bloqueo y el otro podría intentar leerlo utilizando foreach?
Creo que a lo que se refiere es al hecho de que la implementación implícita de GetEnumerator() sí llama al bloqueo. – user7116
De hecho lo hace. Tonto, no hay nada que deba ser bloqueado. La referencia de la lista interna no puede cambiar, solo su contenido. El iterador solo almacena la referencia de la lista. –
Creo que debería hacerlo porque una llamada a 'GetEnumerator()' eventualmente crea un 'Enumerator' nuevo que se basa en el campo 'List ._version'. –
user7116