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; } ); }
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); } } }); }
public void Complete(T message) { _dequeueLocker.AtomWrite(() => { _messageStore.RemoveMessage(Name, message); }); }