Ejemplo n.º 1
0
        public SlideTimeoutAwaiter(int timeout, EventHandler onTimeoutCallback = null, bool whenTimeoutThrowException = true) : base()
        {
            if (timeout > 0)
            {
                block = CallbackTimer.Default.Call(timeout, timeoutCallback);
            }

            _onTimeoutCallback         = onTimeoutCallback;
            _whenTimeoutThrowException = whenTimeoutThrowException;
        }
Ejemplo n.º 2
0
        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();
        }