protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { // TODO: dispose managed state (managed objects). cancellationTokenSource?.Dispose(); limitedConsumeSempahore?.Dispose(); } // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below. // TODO: set large fields to null. disposedValue = true; } }
public void GiveTakeTest() { var sem = new SimpleCountingSemaphore(3, 0); sem.Take(); Assert.AreEqual(sem.Count, 1); sem.Take(); Assert.AreEqual(sem.Count, 2); sem.Take(); Assert.AreEqual(sem.Count, 3); var result = sem.TryTake(); Assert.IsFalse(result); Assert.AreEqual(sem.Count, 3); Timer timer = new Timer(200); timer.Elapsed += (sender, e) => sem.Give(); timer.Start(); sem.Take(); Assert.AreEqual(sem.Count, 3); sem.Give(); Assert.AreEqual(sem.Count, 2); sem.Give(); Assert.AreEqual(sem.Count, 1); sem.Give(); Assert.AreEqual(sem.Count, 0); sem.Give(); Assert.AreEqual(sem.Count, 0); sem.Dispose(); CatchExceptionHelper.VerifyExceptionCaught <ObjectDisposedException>(() => sem.Take()); }