public virtual void Post(T item) { if (_mode == PortMode.OptimizedSingleReissueReceiver) { PostInternalFast(item); return; } PostInternal(false, new PortElement <T>(item, this) { _causalityContext = Dispatcher.CloneCausalitiesFromCurrentThread() }); }
protected virtual Timer EnqueueTimerUsingClrSystemTimers(TimeSpan timeSpan, Port <DateTime> timerPort) { CausalityThreadContext causalityContext = Dispatcher.CloneCausalitiesFromCurrentThread(); if (timeSpan.TotalMilliseconds <= 5.0 && timeSpan.Milliseconds >= 0) { timerPort.Post(DateTime.Now); return(null); } timeSpan = TimeSpan.FromSeconds(timeSpan.TotalSeconds * _timescale); DispatcherQueue.ClrSystemTimerContext clrSystemTimerContext = new DispatcherQueue.ClrSystemTimerContext(timerPort, causalityContext); Timer timer = new Timer(new TimerCallback(ClrSystemTimerHandler), clrSystemTimerContext, -1, -1); clrSystemTimerContext.Timer = timer; lock (_clrSystemTimerTable) { _clrSystemTimerTable.Add(clrSystemTimerContext.Id, timer); } timer.Change(timeSpan, TimeSpan.FromMilliseconds(-1.0)); return(timer); }
public virtual void EnqueueTimer(TimeSpan timeSpan, Port <DateTime> timerPort) { if (_dispatcher == null || (_dispatcher.Options & DispatcherOptions.UseHighAccuracyTimerLogic) == DispatcherOptions.None) { EnqueueTimerUsingClrSystemTimers(timeSpan, timerPort); return; } CausalityThreadContext causalityContext = Dispatcher.CloneCausalitiesFromCurrentThread(); timeSpan = TimeSpan.FromSeconds(timeSpan.TotalSeconds * _timescale); DateTime dateTime = DateTime.UtcNow + timeSpan; DispatcherQueue.TimerContext item = new DispatcherQueue.TimerContext(timerPort, causalityContext, dateTime); bool flag = false; lock (_timerTable) { if (dateTime < _nextTimerExpiration) { _nextTimerExpiration = dateTime; flag = true; } if (_timerTable.ContainsKey(dateTime.Ticks)) { _timerTable[dateTime.Ticks].Add(item); } else { List <DispatcherQueue.TimerContext> list = new List <DispatcherQueue.TimerContext>(1); list.Add(item); _timerTable[dateTime.Ticks] = list; } } if (flag) { Enqueue(new Task(delegate { })); } }
public Task(Handler handler) { _handler = handler; _causalityContext = Dispatcher.CloneCausalitiesFromCurrentThread(); }
public IterativeTask(IteratorHandler handler) { _Handler = handler; _causalityContext = Dispatcher.CloneCausalitiesFromCurrentThread(); }