public override async Task DisposeAsyncReleasesQueuedAcquires() { var limiter = new FixedWindowRateLimiter(new FixedWindowRateLimiterOptions(1, QueueProcessingOrder.OldestFirst, 3, TimeSpan.Zero, autoReplenishment: false)); var lease = limiter.Acquire(1); var wait1 = limiter.WaitAsync(1); var wait2 = limiter.WaitAsync(1); var wait3 = limiter.WaitAsync(1); Assert.False(wait1.IsCompleted); Assert.False(wait2.IsCompleted); Assert.False(wait3.IsCompleted); await limiter.DisposeAsync(); lease = await wait1; Assert.False(lease.IsAcquired); lease = await wait2; Assert.False(lease.IsAcquired); lease = await wait3; Assert.False(lease.IsAcquired); // Throws after disposal Assert.Throws <ObjectDisposedException>(() => limiter.Acquire(1)); await Assert.ThrowsAsync <ObjectDisposedException>(() => limiter.WaitAsync(1).AsTask()); }