Esempio n. 1
0
        public JobHandle Submit(Group group, ThreadStart job, long initialDelayNanos, long reschedulingDelayNanos)
        {
            long now = _clock.nanos();
            long nextDeadlineNanos  = now + initialDelayNanos;
            ScheduledJobHandle task = new ScheduledJobHandle(this, group, job, nextDeadlineNanos, reschedulingDelayNanos);

            EnqueueTask(task);
            return(task);
        }
Esempio n. 2
0
 private long ScheduleDueTasks(long now)
 {
     if (_delayedTasks.Empty)
     {
         // We have no tasks to run. Park until we're woken up by an enqueueTask() call.
         return(_noTasksPark);
     }
     while (!_stopped && !_delayedTasks.Empty && _delayedTasks.peek().nextDeadlineNanos <= now)
     {
         ScheduledJobHandle task = _delayedTasks.poll();
         task.SubmitIfRunnable(_pools);
     }
     return(_delayedTasks.Empty ? _noTasksPark : _delayedTasks.peek().nextDeadlineNanos - now);
 }
Esempio n. 3
0
 internal void EnqueueTask(ScheduledJobHandle newTasks)
 {
     _delayedTasks.offer(newTasks);
     LockSupport.unpark(_timeKeeper);
 }