async Task EventAppeared( EventStoreCatchUpSubscription _, ResolvedEvent resolvedEvent) { if (resolvedEvent.Event.EventType.StartsWith("$")) { return; } var @event = resolvedEvent.Deserialze(); _log.Debug("Projecting event {event}", @event.ToString()); try { await PrometheusMetrics.Measure(async() => { await Task.WhenAll(_eventHandlers.Select(x => x(@event))); await _checkpointStore.StoreCheckpoint( resolvedEvent.OriginalPosition.Value ); }, PrometheusMetrics.SubscriptionTimer(_subscriptionName)); PrometheusMetrics.ObserveLeadTime( resolvedEvent.Event.EventType, resolvedEvent.Event.Created, _subscriptionName); } catch (Exception e) { _log.Error( e, "Error occured when projecting the event {event}", @event ); throw; } }