예제 #1
0
 /// <summary>Ctor. </summary>
 /// <param name="view">is the blocking dispatch view through which to execute a dispatch</param>
 /// <param name="earlier">is the older future</param>
 /// <param name="msecTimeout">is the timeout period to wait for listeners to complete a prior dispatch</param>
 /// <param name="timeSourceService">time source provider</param>
 public UpdateDispatchFutureSpin(UpdateDispatchViewBlockingSpin view,
                                 UpdateDispatchFutureSpin earlier,
                                 long msecTimeout,
                                 TimeSourceService timeSourceService)
 {
     _view              = view;
     _earlier           = earlier;
     _msecTimeout       = msecTimeout;
     _timeSourceService = timeSourceService;
 }
 /// <summary>
 ///     Ctor.
 /// </summary>
 /// <param name="dispatchService">for performing the dispatch</param>
 /// <param name="msecTimeout">timeout for preserving dispatch order through blocking</param>
 /// <param name="statementResultService">handles result delivery</param>
 /// <param name="timeSourceService">time source provider</param>
 /// <param name="eventType">event type</param>
 public UpdateDispatchViewBlockingSpin(
     EventType eventType,
     StatementResultService statementResultService,
     DispatchService dispatchService,
     long msecTimeout,
     TimeSourceService timeSourceService)
     : base(eventType, statementResultService, dispatchService)
 {
     currentFutureSpin = new UpdateDispatchFutureSpin(timeSourceService); // use a completed future as a start
     this.msecTimeout = msecTimeout;
     this.timeSourceService = timeSourceService;
 }
        public override void NewResult(UniformPair<EventBean[]> result)
        {
            var dispatchTLEntry = statementResultService.DispatchTL.GetOrCreate();
            statementResultService.Indicate(result, dispatchTLEntry);
            if (!dispatchTLEntry.IsDispatchWaiting) {
                UpdateDispatchFutureSpin nextFutureSpin;
                lock (this) {
                    nextFutureSpin = new UpdateDispatchFutureSpin(this, currentFutureSpin, msecTimeout, timeSourceService);
                    currentFutureSpin = nextFutureSpin;
                }

                dispatchService.AddExternal(nextFutureSpin);
                dispatchTLEntry.IsDispatchWaiting = true;
            }
        }
예제 #4
0
 private void Completed()
 {
     _isCompleted = true;
     _earlier     = null;
 }