internal EventHandlerGroup <T> CreateEventProcessors(ISequence[] barrierSequences, IEventHandler <T>[] eventHandlers) { CheckNotStarted(); var processorSequences = new List <ISequence>(eventHandlers.Length); var barrier = _ringBuffer.NewBarrier(barrierSequences); foreach (var eventHandler in eventHandlers) { var batchEventProcessor = new BatchEventProcessor <T>(_ringBuffer, barrier, eventHandler); if (_exceptionHandler != null) { batchEventProcessor.SetExceptionHandler(_exceptionHandler); } _consumerRepository.Add(batchEventProcessor, eventHandler, barrier); processorSequences.Add(batchEventProcessor.Sequence); } if (processorSequences.Count > 0) { _consumerRepository.UnMarkEventProcessorsAsEndOfChain(barrierSequences); } return(new EventHandlerGroup <T>(this, _consumerRepository, processorSequences)); }
public EventHandlerGroup <T> CreateEventProcessors(Sequence[] barrierSequences, IEventHandler <T>[] eventHandlers) { CheckNotStarted(); var processorSequences = new Sequence[eventHandlers.Length]; var barrier = ringBuffer.NewBarrier(barrierSequences); for (int i = 0, eventHandlersLength = eventHandlers.Length; i < eventHandlersLength; i++) { IEventHandler <T> eventHandler = eventHandlers[i]; BatchEventProcessor <T> batchEventProcessor = new BatchEventProcessor <T>(ringBuffer, barrier, eventHandler); if (exceptionHandler != null) { batchEventProcessor.SetExceptionHandler(exceptionHandler); } consumerRepository.Add(batchEventProcessor, eventHandler, barrier); processorSequences[i] = batchEventProcessor.Sequence; } if (processorSequences.Length > 0) { consumerRepository.UnMarkEventProcessorsAsEndOfChain(barrierSequences); } return(new EventHandlerGroup <T>(this, consumerRepository, processorSequences)); }
private void UpdateGatingSequencesForNextInChain(ISequence[] barrierSequences, ISequence[] processorSequences) { if (processorSequences.Length > 0) { _ringBuffer.AddGatingSequences(processorSequences); foreach (var barrierSequence in barrierSequences) { _ringBuffer.RemoveGatingSequence(barrierSequence); } _consumerRepository.UnMarkEventProcessorsAsEndOfChain(barrierSequences); } }