public void EnqueueToWaiting(ProcessingEvent processingEvent) { lock (syncLock) waitingQueue.TryAdd(processingEvent.Stream.Version, processingEvent); lastActiveOn = DateTime.UtcNow; Restart(); }
public void Enqueue(ProcessingEvent processingEvent) { lock (syncLock) { processingEvent.Queue = this; queue.TryAdd(processingEvent); } lastActiveOn = DateTime.UtcNow; TryStart(); }
public async Task ProcessAsync(ProcessingEvent processingEvent) { lastActiveOn = DateTime.UtcNow; if (waitingQueue.TryGetValue(processingEvent.Stream.Version + 1, out var waiting)) { await handler.HandleAsync(waiting); } else { Restart(); } }
Task DispatchEventAsync(ProcessingEvent processingEvent) { var events = processingEvent.Stream.Events; if (events?.Count > 0) { using (var serviceScope = serviceProvider.CreateScope()) { var queue = BuildHandlingEventQueue(events, serviceScope); if (!queue.IsCompleted && queue.TryTake(out var current)) { return(HandleEventAsync(processingEvent, current, queue)); } return(SaveVersionAsync(processingEvent)); } } return(processingEvent.OnQueueProcessedAsync()); }
async Task HandleEventAsync(ProcessingEvent processingEvent, (IEvent Event, IEventHandler Handler) current, BlockingCollection <(IEvent Event, IEventHandler Handler)> queue)