public async Task Foo() { using (var w = await writeToken.LockAsync()) { ReusableMethod(w.Value); } }
public void CancelLockAsync_Cancel() { // setup var semaphore = new SemaphoreSlim(1); var value = new List(); var subject = new AsyncSynchronized <List>(semaphore, value); // act and assert Should.Throw <TaskCanceledException>(() => subject.LockAsync(new CancellationTokenSource(0).Token)); }
public async Task LockAsync_Acquire() { // setup var semaphore = new SemaphoreSlim(1); var value = new List(); var subject = new AsyncSynchronized <List>(semaphore, value); // act and assert using (var guard = await subject.LockAsync()) { semaphore.CurrentCount.ShouldBe(0); guard.Value.ShouldBe(value); } semaphore.CurrentCount.ShouldBe(1); }