public void Publish <T>(T ev) where T : IEvent { using (_metricsReporter.TimeScope(CreateMeter <T>("_Sync"))) { IEventSubscription[] subscriptions; _handlersLock.EnterReadLock(); try { subscriptions = _subscriptions.Where(x => x.IsSubscribed(ev)).ToArray(); } finally { _handlersLock.ExitReadLock(); } foreach (var s in subscriptions) { try { s.CallIfSubscribed(ev); } catch (Exception ex) { _exceptionLogger.Error(s.Target.GetType(), ev, ex); } } } }
private void Call(IEvent ev) { using (_metricsReporter.TimeScope("Events." + (_callback.Target?.GetType().Name ?? "Lambda"))) _callback((T)ev); }