public long CheckRemaining() { var remaining = _targetTime - ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow()); if (remaining <= 0) { Finish(null); return(0); } return(remaining); }
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); }
protected void Start(long dueTime) { _startTime = ThreadingHelper.Milliseconds(ThreadingHelper.TicksNow()); _targetTime = _startTime + dueTime; _wrapped = new Timer(Finish, null, TimeSpan.FromMilliseconds(dueTime), TimeSpan.FromMilliseconds(-1)); }