public void Start()
        {
            if (this.running)
            {
                return;
            }

            this.running = true;
            Executors.RunAsyncNoReturn(() =>
            {
                IDelayTask task = null;
                while (running)
                {
                    lock (_lock)
                    {
                        if (queue.Count <= 0)
                        {
                            Monitor.Wait(_lock);
                            continue;
                        }

                        task = queue[0];
                        if (task.Delay.Ticks > 0)
                        {
                            Monitor.Wait(_lock, task.Delay);
                            continue;
                        }

                        queue.RemoveAt(0);
                    }

                    task.Run();
                }
            });
        }
 private void Add(IDelayTask task)
 {
     lock (_lock)
     {
         queue.Add(task);
         queue.Sort(comparer);
         Monitor.PulseAll(_lock);
     }
 }
Exemplo n.º 3
0
 private bool Remove(IDelayTask task)
 {
     if (_queue.Remove(task))
     {
         _queue.Sort(_comparer);
         return(true);
     }
     return(false);
 }
 private bool Remove(IDelayTask task)
 {
     lock (_lock)
     {
         if (queue.Remove(task))
         {
             queue.Sort(comparer);
             Monitor.PulseAll(_lock);
             return(true);
         }
     }
     return(false);
 }
Exemplo n.º 5
0
        protected virtual IEnumerator DoStart()
        {
            while (running)
            {
                while (running && (queue.Count <= 0 || queue[0].Delay.Ticks > 0))
                {
                    yield return(null);
                }

                if (!running)
                {
                    yield break;
                }

                IDelayTask task = queue[0];
                queue.RemoveAt(0);
                task.Run();
            }
        }
        public void Start()
        {
            if (this.running)
            {
                return;
            }

            this.running = true;
#if NETFX_CORE
            Task.Factory.StartNew(() =>
            {
                IDelayTask task = null;
                while (running)
                {
                    lock (_lock)
                    {
                        if (queue.Count <= 0)
                        {
                            Monitor.Wait(_lock);
                            continue;
                        }

                        task = queue[0];
                        if (task.Delay.Ticks > 0)
                        {
                            Monitor.Wait(_lock, task.Delay);
                            continue;
                        }

                        queue.RemoveAt(0);
                    }

                    task.Run();
                }
            });
#else
            ThreadPool.QueueUserWorkItem(state =>
            {
                IDelayTask task = null;
                while (running)
                {
                    lock (_lock)
                    {
                        if (queue.Count <= 0)
                        {
                            Monitor.Wait(_lock);
                            continue;
                        }

                        task = queue[0];
                        if (task.Delay.Ticks > 0)
                        {
                            Monitor.Wait(_lock, task.Delay);
                            continue;
                        }

                        queue.RemoveAt(0);
                    }

                    task.Run();
                }
            });
#endif
        }
Exemplo n.º 7
0
 private void Add(IDelayTask task)
 {
     queue.Add(task);
     queue.Sort(comparer);
 }
Exemplo n.º 8
0
 private void Add(IDelayTask task)
 {
     _queue.Add(task);
     _queue.Sort(_comparer);
 }