示例#1
0
 public virtual void Post(T item)
 {
     if (_mode == PortMode.OptimizedSingleReissueReceiver)
     {
         PostInternalFast(item);
         return;
     }
     PostInternal(false, new PortElement <T>(item, this)
     {
         _causalityContext = Dispatcher.CloneCausalitiesFromCurrentThread()
     });
 }
示例#2
0
        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);
        }
示例#3
0
        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
                {
                }));
            }
        }
示例#4
0
文件: Task.cs 项目: xtuyaowu/xparser
 public Task(Handler handler)
 {
     _handler          = handler;
     _causalityContext = Dispatcher.CloneCausalitiesFromCurrentThread();
 }
示例#5
0
 public IterativeTask(IteratorHandler handler)
 {
     _Handler          = handler;
     _causalityContext = Dispatcher.CloneCausalitiesFromCurrentThread();
 }