/// <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; } }
private void Completed() { _isCompleted = true; _earlier = null; }