public void AtomWrite_Test()
        {
            ReaderWriterLockSlim readerWriterLockSlim = null;

            Assert.Throws <ArgumentNullException>(() =>
            {
                readerWriterLockSlim.AtomWrite(() => { });
            });

            Assert.Throws <ArgumentNullException>(() =>
            {
                readerWriterLockSlim.AtomWrite <int>(() => 1);
            });


            readerWriterLockSlim = new ReaderWriterLockSlim();
            Assert.Throws <ArgumentNullException>(() =>
            {
                readerWriterLockSlim.AtomWrite(null);
            });

            Func <int> func1 = null;

            Assert.Throws <ArgumentNullException>(() =>
            {
                readerWriterLockSlim.AtomWrite(func1);
            });

            readerWriterLockSlim.AtomWrite(_mockAction.Object);
            _mockAction.Verify(x => x.Invoke(), Times.Once);

            readerWriterLockSlim.AtomWrite(_mockFunc.Object);
            _mockFunc.Verify(x => x.Invoke(), Times.Once);
        }
 /// <summary>
 /// 更新是否可以被自动Dispose的标记位
 /// </summary>
 internal void UpdateCanAutoDispose(bool canAutoDispose)
 {
     _readerWriterLockSlim.AtomWrite(
         () =>
     {
         _canAutoDispose = canAutoDispose;
     }
         );
 }
Example #3
0
 public void Enqueue(T message)
 {
     _enqueueLocker.AtomWrite(() => {
         _messageStore.AddMessage(Name, message);
         _queue.Add(message);
         if (Logger.IsDebugEnabled)
         {
             Logger.DebugFormat("{0} enqueued, id:{1}", message.ToString(), message.Id);
         }
     });
 }
        /// <summary>
        /// <see cref="ITransaction.Begin"/>.
        /// </summary>
        public virtual void Begin()
        {
            _Sem.AtomWrite(() =>
            {
                AssertState(TransactionStatus.NoTransaction);
                Status = TransactionStatus.Active;
            });

            _Logger.TryLogFail(InnerBegin)
            .Exception(e => { _CanCommit = false; throw new TransactionException("Could not begin transaction.", e); })
            .Success(() =>
                     _CanCommit = true);

            _Sem.AtomRead(() =>
            {
                foreach (var r in _Resources)
                {
                    try { r.Start(); }
                    catch (Exception e)
                    {
                        SetRollbackOnly();
                        throw new CommitResourceException("Transaction could not commit because of a failed resource.",
                                                          e, r);
                    }
                }
            });
        }
Example #5
0
 public void Complete(T message)
 {
     _dequeueLocker.AtomWrite(() => {
         _messageStore.RemoveMessage(Name, message);
     });
 }