/// <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); } }
/// <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; }