internal IAsyncResult BeginWait(int millis, AsyncCallback callback, object state) { VerifyTaskManager(); lock (_waiters) { _waiters.Add(callback); } if (millis == Timeout.Infinite) // task will wait forever till pulsed return null; if (millis <= 0) throw new ArgumentException("Argument must be greater than zero"); AsyncTimer timer = new AsyncTimer(); timer.Start(millis, delegate(IAsyncResult ar) { ((IDisposable)timer).Dispose(); bool timedOut = false; lock(_waiters) { if (_waiters.Contains(callback)) // timed out { timedOut = true; _waiters.Remove(callback); } } if (timedOut) callback(BoolResult.FalseValue); }, null); return null; }
private IAsyncCall GotoSleep(int millis) { if (millis <= 0) { throw new ArgumentException("Argument must be greater than zero"); } if (_timer == null) { _timer = new AsyncTimer(); } return(_waitCall .WaitOn(cb => _timer.Start(millis, cb, null)) & _timer.End); }
protected virtual void Dispose(bool disposing) { TaskState = TaskState.Terminated; if (_asyncCallIterator != null) { _asyncCallIterator.Dispose(); _asyncCallIterator = null; } if (_timer != null) { ((IDisposable)_timer).Dispose(); _timer = null; } }
internal IAsyncResult BeginWait(int millis, AsyncCallback callback, object state) { VerifyTaskManager(); lock (_waiters) { _waiters.Add(callback); } if (millis == Timeout.Infinite) // task will wait forever till pulsed { return(null); } if (millis <= 0) { throw new ArgumentException("Argument must be greater than zero"); } AsyncTimer timer = new AsyncTimer(); timer.Start(millis, delegate(IAsyncResult ar) { ((IDisposable)timer).Dispose(); bool timedOut = false; lock (_waiters) { if (_waiters.Contains(callback)) // timed out { timedOut = true; _waiters.Remove(callback); } } if (timedOut) { callback(BoolResult.FalseValue); } }, null); return(null); }
private IAsyncCall GotoSleep(int millis) { if (millis <= 0) throw new ArgumentException("Argument must be greater than zero"); if (_timer == null) _timer = new AsyncTimer(); return _waitCall .WaitOn(cb => _timer.Start(millis, cb, null)) & _timer.End; }