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);
 }