public static void CallDisposeTwice() { var @lock = new AsyncReaderWriterLock(); @lock.Dispose(); True(@lock.DisposeAsync().IsCompletedSuccessfully); }
public static void GracefulShutdown() { using var @lock = new AsyncReaderWriterLock(); True(@lock.TryEnterWriteLock()); var task = @lock.DisposeAsync(); False(task.IsCompleted); @lock.ExitWriteLock(); True(task.IsCompletedSuccessfully); Throws <ObjectDisposedException>(() => @lock.TryEnterReadLock()); }
public static void GracefulShutdown2() { using var @lock = new AsyncReaderWriterLock(); True(@lock.TryEnterReadLock()); var task = @lock.DisposeAsync(); False(task.IsCompleted); var acquisition = @lock.EnterWriteLockAsync(CancellationToken.None); False(acquisition.IsCompleted); @lock.ExitReadLock(); True(task.IsCompletedSuccessfully); True(acquisition.IsFaulted); Throws <ObjectDisposedException>(acquisition.GetAwaiter().GetResult); }
public static void DisposeAsyncCompletedAsynchronously() { using var @lock = new AsyncReaderWriterLock(); True(@lock.DisposeAsync().IsCompletedSuccessfully); }