Esempio n. 1
0
 public async Task Foo()
 {
     using (var w = await writeToken.LockAsync())
     {
         ReusableMethod(w.Value);
     }
 }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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);
        }