private static async void AcquireWeakLockAndRelease(AsyncSharedLock sharedLock, AsyncCountdownEvent acquireEvent) { await Task.Delay(100); await sharedLock.Acquire(false, TimeSpan.Zero); acquireEvent.Signal(); await Task.Delay(100); sharedLock.Release(); }
public static async Task StrongToWeakLockTransition() { using (var acquireEvent = new AsyncCountdownEvent(2L)) using (var sharedLock = new AsyncSharedLock(3)) { await sharedLock.Acquire(true, TimeSpan.Zero); AcquireWeakLock(sharedLock, acquireEvent); AcquireWeakLock(sharedLock, acquireEvent); sharedLock.Release(); True(await acquireEvent.Wait(TimeSpan.FromMinutes(1))); Equal(1, sharedLock.RemainingCount); } }
public static async Task WeakToStrongLockTransition() { using (var acquireEvent = new AsyncCountdownEvent(3L)) using (var sharedLock = new AsyncSharedLock(3)) { AcquireWeakLockAndRelease(sharedLock, acquireEvent); AcquireWeakLockAndRelease(sharedLock, acquireEvent); AcquireWeakLockAndRelease(sharedLock, acquireEvent); await acquireEvent.Wait(); await sharedLock.Acquire(true, TimeSpan.FromMinutes(1)); Equal(0, sharedLock.RemainingCount); } }
private static async void AcquireWeakLock(AsyncSharedLock sharedLock, AsyncCountdownEvent acquireEvent) { await sharedLock.Acquire(false, CancellationToken.None); acquireEvent.Signal(); }