예제 #1
0
        public static void CallDisposeTwice()
        {
            var @lock = new AsyncSharedLock(3);

            @lock.Dispose();
            True(@lock.DisposeAsync().IsCompletedSuccessfully);
        }
예제 #2
0
        public static void GracefulShutdown()
        {
            using var @lock = new AsyncSharedLock(3);
            True(@lock.TryAcquire(false));
            var task = @lock.DisposeAsync();

            False(task.IsCompleted);
            @lock.Release();
            True(task.IsCompletedSuccessfully);
            Throws <ObjectDisposedException>(() => @lock.TryAcquire(true));
        }
예제 #3
0
        public static void GracefulShutdown3()
        {
            using var @lock = new AsyncSharedLock(3);
            True(@lock.TryAcquire(false));
            var task = @lock.DisposeAsync();

            False(task.IsCompleted);
            var acquisition = @lock.AcquireAsync(true, CancellationToken.None);

            False(acquisition.IsCompleted);
            @lock.Downgrade();
            True(task.IsCompletedSuccessfully);
            True(acquisition.IsFaulted);
            Throws <ObjectDisposedException>(acquisition.GetAwaiter().GetResult);
        }
예제 #4
0
 public static void DisposeAsyncCompletedAsynchronously()
 {
     using var @lock = new AsyncSharedLock(3);
     True(@lock.DisposeAsync().IsCompletedSuccessfully);
 }