public SlideTimeoutAwaiter(int timeout, EventHandler onTimeoutCallback = null, bool whenTimeoutThrowException = true) : base() { if (timeout > 0) { block = CallbackTimer.Default.Call(timeout, timeoutCallback); } _onTimeoutCallback = onTimeoutCallback; _whenTimeoutThrowException = whenTimeoutThrowException; }
private void callbackInvoker(object state) { _locker.EnterUpgradeableReadLock(); //如果回调的时候的当前值不是原来传入回调时的值,则退出操作,防止出现并发 if (!_value.Equals(state)) { _locker.ExitUpgradeableReadLock(); return; } _locker.EnterWriteLock(); _isValueCreated = false; _value = default(T); _block.Dispose(); _block = null; _locker.ExitWriteLock(); _locker.ExitUpgradeableReadLock(); }