Example #1
0
        public void EnqueueToWaiting(ProcessingEvent processingEvent)
        {
            lock (syncLock)
                waitingQueue.TryAdd(processingEvent.Stream.Version, processingEvent);

            lastActiveOn = DateTime.UtcNow;
            Restart();
        }
Example #2
0
        public void Enqueue(ProcessingEvent processingEvent)
        {
            lock (syncLock)
            {
                processingEvent.Queue = this;
                queue.TryAdd(processingEvent);
            }

            lastActiveOn = DateTime.UtcNow;
            TryStart();
        }
Example #3
0
        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)