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); } }
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); }
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 }
private void Add(IDelayTask task) { queue.Add(task); queue.Sort(comparer); }
private void Add(IDelayTask task) { _queue.Add(task); _queue.Sort(_comparer); }