public static void DowgradeWeakLock() { using var sharedLock = new AsyncSharedLock(3); True(sharedLock.TryAcquire(false)); Equal(2, sharedLock.RemainingCount); sharedLock.Downgrade(); False(sharedLock.IsLockHeld); Throws <SynchronizationLockException>(sharedLock.Downgrade); }
public static void DowngradeFromStrongToWeakLock() { using var sharedLock = new AsyncSharedLock(3); True(sharedLock.TryAcquire(true)); Equal(0, sharedLock.RemainingCount); False(sharedLock.TryAcquire(false)); sharedLock.Downgrade(); Equal(2, sharedLock.RemainingCount); sharedLock.Release(); Equal(3, sharedLock.RemainingCount); }
public static void GracefulShutdown5() { using var @lock = new AsyncSharedLock(3); True(@lock.TryAcquire(true)); var acquisition1 = @lock.AcquireAsync(false, CancellationToken.None); False(acquisition1.IsCompleted); var task = @lock.DisposeAsync(); False(task.IsCompleted); var acquisition2 = @lock.AcquireAsync(false, CancellationToken.None); False(task.IsCompleted); @lock.Downgrade(); True(acquisition1.IsCompletedSuccessfully); False(acquisition2.IsCompleted); False(task.IsCompleted); @lock.Downgrade(); True(acquisition2.IsFaulted); True(task.IsCompletedSuccessfully); Throws <ObjectDisposedException>(acquisition2.GetAwaiter().GetResult); }