¿Es esto seguro para subprocesos?EventAggregator, ¿es seguro para subprocesos?
El EventAggregator en Prisma es una clase muy simple, con un solo método. Me sorprendió cuando noté que no había ningún bloqueo alrededor de la verificación nula y la creación de un nuevo tipo para agregar a la colección privada _events. Si dos subprocesos llamados GetEvent simultáneamente para el mismo tipo (antes de que exista en _events) parece que esto daría como resultado dos entradas en la colección.
/// <summary>
/// Gets the single instance of the event managed by this EventAggregator. Multiple calls to this method with the same <typeparamref name="TEventType"/> returns the same event instance.
/// </summary>
/// <typeparam name="TEventType">The type of event to get. This must inherit from <see cref="EventBase"/>.</typeparam>
/// <returns>A singleton instance of an event object of type <typeparamref name="TEventType"/>.</returns>
public TEventType GetEvent<TEventType>() where TEventType : EventBase
{
TEventType eventInstance = _events.FirstOrDefault(evt => evt.GetType() == typeof(TEventType)) as TEventType;
if (eventInstance == null)
{
eventInstance = Activator.CreateInstance<TEventType>();
_events.Add(eventInstance);
}
return eventInstance;
}
+1 @ Peter De acuerdo. Vine aquí para comprobar la cordura después de tener algunos problemas y luego mirar el código de EventAggregator en el reflector. No puedo creer que no lo hicieron seguro para subprocesos dado el uso arquitectónico previsto. De todos modos, me sorprendió. –
@chibacity yo también, sorprendido de que estuviera ;-) –