Tengo el siguiente fragmento de código:¿El retorno de rendimiento en C# es seguro para subprocesos?
private Dictionary<object, object> items = new Dictionary<object, object>;
public IEnumerable<object> Keys
{
get
{
foreach (object key in items.Keys)
{
yield return key;
}
}
}
Es esto seguro para subprocesos? Si no, ¿tengo que poner un lock
alrededor del lazo o el yield return
?
Esto es lo que quiero decir:
Thread1 acceso a la propiedad Keys
mientras Thread2 añade un elemento al diccionario subyacente. ¿Thread1 está afectado por el agregado de Thread2?
Su segundo exemple se bloqueará, devolver un enumerable desbloquee. Y repetirá DESPUÉS del desbloqueo. – Guillaume
Oh, tienes razón. Me acabo de dar cuenta de que es un mal ejemplo. Editaré la pregunta. – Albic
Solo para arrojar algo de luz: la seguridad del hilo a través del bloqueo es costosa, por lo que no tiene sentido bloquear automáticamente cada acción a menos que usted lo solicite explícitamente. –