public async Task TryTakeTakeTimeoutDispose() { //**************************************** var MyLock = new AsyncSemaphore(1); //**************************************** Assert.True(MyLock.TryTake(out var MyHandle1), "Lock not taken"); var MyTask = Task.Run(async() => { await Task.Delay(50); await MyLock.DisposeAsync(); }); Assert.False(MyLock.TryTake(out var MyHandle2, TimeSpan.FromMilliseconds(100)), "Nested lock taken"); MyHandle1.Dispose(); await MyTask; //**************************************** Assert.AreEqual(0, MyLock.WaitingCount, "Still waiting for Semaphore"); Assert.AreEqual(MyLock.MaxCount, MyLock.CurrentCount, "Semaphore still held"); }
public void TryTakeTakeZero() { //**************************************** var MyLock = new AsyncSemaphore(); //**************************************** Assert.True(MyLock.TryTake(out var MyHandle1), "Lock not taken"); Assert.False(MyLock.TryTake(out _, TimeSpan.Zero), "Nested lock taken"); MyHandle1.Dispose(); //**************************************** Assert.AreEqual(0, MyLock.WaitingCount, "Still waiting for Semaphore"); Assert.AreEqual(MyLock.MaxCount, MyLock.CurrentCount, "Semaphore still held"); }
public void TryTakeCancel() { //**************************************** var MyLock = new AsyncSemaphore(); //**************************************** Assert.True(MyLock.TryTake(out var MyHandle1), "Lock not taken"); using (var MyCancel = new CancellationTokenSource()) { MyCancel.CancelAfter(50); var StartTime = DateTime.Now; try { MyLock.TryTake(out _, MyCancel.Token); Assert.Fail("Nested lock taken"); } catch (OperationCanceledException) { } var EndTime = DateTime.Now; Assert.GreaterOrEqual((EndTime - StartTime).TotalMilliseconds, 50.0, "Finished too early"); } MyHandle1.Dispose(); //**************************************** Assert.AreEqual(0, MyLock.WaitingCount, "Still waiting for Semaphore"); Assert.AreEqual(MyLock.MaxCount, MyLock.CurrentCount, "Semaphore still held"); }
public void TryTakeMaxTime() { //**************************************** var MyLock = new AsyncSemaphore(); //**************************************** Assert.True(MyLock.TryTake(out var MyHandle1), "Lock not taken"); var StartTime = DateTime.Now; Assert.False(MyLock.TryTake(out _, TimeSpan.FromMilliseconds(50)), "Nested lock taken"); var EndTime = DateTime.Now; MyHandle1.Dispose(); //**************************************** Assert.GreaterOrEqual((EndTime - StartTime).TotalMilliseconds, 50.0, "Finished too early"); Assert.AreEqual(0, MyLock.WaitingCount, "Still waiting for Semaphore"); Assert.AreEqual(MyLock.MaxCount, MyLock.CurrentCount, "Semaphore still held"); }