public bool Change(long dueTime) { if (dueTime < -1) { throw new ArgumentOutOfRangeException("dueTime"); } if (Interlocked.CompareExchange(ref _status, _changing, _created) == _created) { _startTime = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow()); var wrapped = Interlocked.CompareExchange(ref _wrapped, null, null); if (wrapped == null) { return(false); } if (dueTime == -1) { _targetTime = -1; } else { _targetTime = _startTime + dueTime; wrapped.Change(TimeSpan.FromMilliseconds(dueTime), TimeSpan.FromMilliseconds(-1)); } Volatile.Write(ref _status, _created); return(true); } return(false); }
public long CheckRemaining() { var remaining = _targetTime - ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow()); if (remaining <= 0) { Callback(null); return(0); } return(remaining); }
private void Start(long dueTime) { if (dueTime < -1) { throw new ArgumentOutOfRangeException(nameof(dueTime)); } _startTime = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow()); _targetTime = dueTime == -1 ? -1 : _startTime + dueTime; _wrapped = Timer.GetTimer(Finish, TimeSpan.FromMilliseconds(dueTime), TimeSpan.FromMilliseconds(-1)); }
private void Start(long dueTime) { if (dueTime < -1) { throw new ArgumentOutOfRangeException(nameof(dueTime)); } if (Interlocked.CompareExchange(ref _status, _started, _created) == _created) { _startTime = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow()); _targetTime = dueTime == -1 ? -1 : _startTime + dueTime; _wrapped = Timer.GetTimer(Finish, TimeSpan.FromMilliseconds(dueTime), TimeSpan.FromMilliseconds(-1)); } }
public long CheckRemaining() { if (_targetTime == -1) { return(-1); } var remaining = _targetTime - ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow()); if (remaining <= 0) { Finish(null); return(0); } return(remaining); }
protected void Start(long dueTime) { if (dueTime < -1) { throw new ArgumentOutOfRangeException("dueTime"); } _startTime = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow()); if (dueTime == -1) { _targetTime = -1; } else { _targetTime = _startTime + dueTime; } _wrapped = new Timer(Finish, null, TimeSpan.FromMilliseconds(dueTime), TimeSpan.FromMilliseconds(-1)); }
public bool Change(long dueTime) { if (Interlocked.CompareExchange(ref _status, _changing, _created) == _created) { _startTime = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow()); _targetTime = _startTime + dueTime; var wrapped = Interlocked.CompareExchange(ref _wrapped, null, null); if (wrapped == null) { return(false); } wrapped.Change(TimeSpan.FromMilliseconds(dueTime), TimeSpan.FromMilliseconds(-1)); Volatile.Write(ref _status, _created); return(true); } return(false); }
private void Initialize(long dueTime) { if (Thread.VolatileRead(ref _executed) == 1) { ThreadingHelper.SpinWaitWhile(ref _completed, 1); Thread.VolatileWrite(ref _executed, 0); } _start = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow()); _targetTime = _start + dueTime; if (_wrapped == null) { _wrapped = new Timer(Callback, null, dueTime, System.Threading.Timeout.Infinite); } else { _wrapped.Change(dueTime, System.Threading.Timeout.Infinite); } }
public Timeout(Action callback, long dueTime, CancellationToken token) { if (callback == null) { throw new NullReferenceException("callback"); } _start = ThreadingHelper.TicksNow(); if (token.IsCancellationRequested) { _callback = null; _wrapped = null; } else { _callback = callback; Initialize(dueTime); token.Register(Cancel); } _hashcode = unchecked ((int)DateTime.Now.Ticks); }
protected void Start(long dueTime) { _startTime = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow()); _targetTime = _startTime + dueTime; _wrapped = new Timer(Finish, null, TimeSpan.FromMilliseconds(dueTime), TimeSpan.FromMilliseconds(-1)); }