public ManagedEventDispatcher( IEnumerable <View> views, ISequenceResolver sequenceResolver, IRepository <string, SequenceInfo> sequenceRepository, Func <long, IOrderedBuffer> bufferFactory, int quietTimeTimeout) { Guard.Against.NullOrEmptyOrNullElements(() => views); this.views = views.ToDictionary( view => view, view => { var sequenceInfo = sequenceRepository.Get(view.GetType().FullName); return(sequenceInfo == null ? 0L : sequenceInfo.SequenceNumber); }); this.sequenceResolver = sequenceResolver; this.sequenceRepository = sequenceRepository; this.quietTimeTimeout = quietTimeTimeout; this.sequenceNumber = this.views.Values.Min(); this.buffer = bufferFactory.Invoke(this.sequenceNumber); var task = new Task(() => this.Run(this.cancellationTokenSource.Token)); task.ContinueWith(t => this.cancellationTokenSource.Dispose(), TaskContinuationOptions.ExecuteSynchronously); task.Start(); this.timer = new Timer(this.TimerCallback, null, this.quietTimeTimeout, Timeout.Infinite); }
public OrderedEventDispatcher(IEventDispatcher innerEventDispatcher, ISequenceResolver sequenceResolver, IOrderedBuffer buffer) { Guard.Against.Null(() => innerEventDispatcher); Guard.Against.Null(() => sequenceResolver); Guard.Against.Null(() => buffer); this.innerEventDispatcher = innerEventDispatcher; this.sequenceResolver = sequenceResolver; this.buffer = buffer; var task = new Task(() => this.Run(this.cancellationTokenSource.Token)); task.ContinueWith(t => this.cancellationTokenSource.Dispose(), TaskContinuationOptions.ExecuteSynchronously); task.Start(); }