/// <summary>
    /// Acquires a read lock, signaling when a contended read lock is queued when appropriate.
    /// </summary>
    private async Task VerifyReadLockAsync()
    {
        AsyncReaderWriterLock.Awaitable lockRequest        = this.asyncLock.ReadLockAsync();
        AsyncReaderWriterLock.Awaiter?  lockRequestAwaiter = lockRequest.GetAwaiter();
        if (!lockRequestAwaiter.IsCompleted)
        {
            await lockRequestAwaiter.YieldAndNotify(this.lockRequested);
        }

        using (lockRequestAwaiter.GetResult())
        {
            Assert.True(this.asyncLock.IsReadLockHeld);
        }
    }
예제 #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ResourceAwaitable"/> struct.
 /// </summary>
 /// <param name="awaitable">The underlying lock awaitable.</param>
 /// <param name="helper">The helper class.</param>
 internal ResourceAwaitable(AsyncReaderWriterLock.Awaitable awaitable, Helper helper)
 {
     this.awaitable = awaitable;
     this.helper    = helper;
 }