이 스레드로부터 안전한가요?EventAggregator, 스레드로부터 안전합니까?
프리즘의 EventAggregator는 단 하나의 메소드가있는 매우 간단한 클래스입니다. Null 검사와 개인 _events 컬렉션에 추가 할 새 유형 생성과 관련된 문제가 없다는 사실에 놀랐습니다. 동일한 유형 (_events에 존재하기 전에) 동안 두 개의 스레드가 GetEvent를 동시에 호출하면 콜렉션에 두 개의 항목이 생기는 것처럼 보입니다.
/// <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 Agreed. 나는 약간의 문제가 생긴 후에 온건주의 체크를하기 위해 여기에 왔고 반사경에있는 EventAggregator 코드를 살펴 보았다. 의도 한 아키텍처를 사용하여 thread-safe로 만들지 못했다고 나는 믿을 수 없다. 어쨌든 나는 놀랐다. –
@chibacity 나도 놀랐어 ;-) –