Skip to content

Document InvalidOperationException for AsyncReaderWriterLock acquisition methods#1466

Merged
AArnott merged 4 commits into
mainfrom
copilot/fix-1128
Jun 11, 2025
Merged

Document InvalidOperationException for AsyncReaderWriterLock acquisition methods#1466
AArnott merged 4 commits into
mainfrom
copilot/fix-1128

Conversation

Copilot AI commented Jun 11, 2025

Copy link
Copy Markdown
Contributor

This PR adds XML documentation for the InvalidOperationException that is thrown by lock acquisition methods (ReadLockAsync, UpgradeableReadLockAsync, WriteLockAsync) when Complete() has been called on the AsyncReaderWriterLock.

Changes Made

  • Added /// <exception cref="InvalidOperationException"> documentation to all five lock acquisition method overloads
  • Fixed incorrect summary documentation for UpgradeableReadLockAsync(LockFlags) method (was incorrectly described as "Obtains a read lock" instead of "Obtains an upgradeable read lock")

Background

When AsyncReaderWriterLock.Complete() is called, the lock is marked for completion and any subsequent new top-level lock requests throw an InvalidOperationException with the message:

"This lock has already been marked for completion. No new top-level locks can be serviced."

This behavior was already implemented and tested (see CompleteBlocksNewTopLevelLocksSTA and CompleteBlocksNewTopLevelLocksMTA tests), but the public API methods lacked documentation about this exception.

Example

var asyncLock = new AsyncReaderWriterLock();
asyncLock.Complete();

// This will now throw InvalidOperationException as documented
using (await asyncLock.ReadLockAsync()) 
{
    // This code won't execute
}

The changes are minimal and only add documentation without modifying any functionality.

Fixes #1128.

Warning

Firewall rules blocked me from connecting to one or more addresses

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 1elvsblobprodwus2177.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
    • Triggering command: dotnet build src/Microsoft.VisualStudio.Threading/Microsoft.VisualStudio.Threading.csproj --nologo (dns block)
  • 2wrvsblobprodwus2180.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • 31bvsblobprodwus2143.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • 5o1vsblobprodwus2115.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
    • Triggering command: dotnet build src/Microsoft.VisualStudio.Threading/Microsoft.VisualStudio.Threading.csproj --nologo (dns block)
  • 78kvsblobprodwus2152.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • 8wdvsblobprodwus2137.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • 9yyvsblobprodwus2157.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • abcvsblobprodwus2161.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
    • Triggering command: dotnet build src/Microsoft.VisualStudio.Threading/Microsoft.VisualStudio.Threading.csproj --nologo (dns block)
  • an0vsblobprodwus2146.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • b15vsblobprodwus2164.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • b53vsblobprodwus2154.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • cffvsblobprodwus218.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • d94vsblobprodwus2119.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • dyrvsblobprodwus2173.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • fcwvsblobprodwus2113.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
    • Triggering command: dotnet build src/Microsoft.VisualStudio.Threading/Microsoft.VisualStudio.Threading.csproj --nologo (dns block)
  • h8evsblobprodwus2120.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • i01vsblobprodwus216.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
    • Triggering command: dotnet build src/Microsoft.VisualStudio.Threading/Microsoft.VisualStudio.Threading.csproj --nologo (dns block)
  • isovsblobprodwus211.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
    • Triggering command: dotnet build src/Microsoft.VisualStudio.Threading/Microsoft.VisualStudio.Threading.csproj --nologo (dns block)
  • jk4vsblobprodwus2186.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • jlovsblobprodwus2163.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
    • Triggering command: dotnet build src/Microsoft.VisualStudio.Threading/Microsoft.VisualStudio.Threading.csproj --nologo (dns block)
  • km4vsblobprodwus2183.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
    • Triggering command: dotnet build src/Microsoft.VisualStudio.Threading/Microsoft.VisualStudio.Threading.csproj --nologo (dns block)
  • mdcvsblobprodwus2159.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • nypvsblobprodwus2178.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
    • Triggering command: dotnet build src/Microsoft.VisualStudio.Threading/Microsoft.VisualStudio.Threading.csproj --nologo (dns block)
  • pkwvsblobprodwus2126.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • s0ivsblobprodwus2134.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
    • Triggering command: dotnet build src/Microsoft.VisualStudio.Threading/Microsoft.VisualStudio.Threading.csproj --nologo (dns block)
  • s8nvsblobprodwus2158.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • v41vsblobprodwus2175.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • vd2vsblobprodwus2150.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
    • Triggering command: dotnet build src/Microsoft.VisualStudio.Threading/Microsoft.VisualStudio.Threading.csproj --nologo (dns block)
  • vipvsblobprodwus2139.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • wztvsblobprodwus2155.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
    • Triggering command: dotnet build src/Microsoft.VisualStudio.Threading/Microsoft.VisualStudio.Threading.csproj --nologo (dns block)
  • x0dvsblobprodwus2111.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • x1mvsblobprodwus2181.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • xktvsblobprodwus2141.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
    • Triggering command: dotnet build src/Microsoft.VisualStudio.Threading/Microsoft.VisualStudio.Threading.csproj --nologo (dns block)
  • xofvsblobprodwus2114.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
    • Triggering command: dotnet build src/Microsoft.VisualStudio.Threading/Microsoft.VisualStudio.Threading.csproj --nologo (dns block)
  • y1mvsblobprodwus2138.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
  • z2bvsblobprodwus2185.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)
    • Triggering command: dotnet build src/Microsoft.VisualStudio.Threading/Microsoft.VisualStudio.Threading.csproj --nologo (dns block)
  • zaxvsblobprodwus215.vsblob.vsassets.io
    • Triggering command: dotnet build (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI and others added 3 commits June 11, 2025 02:50
Co-authored-by: AArnott <3548+AArnott@users.noreply.github.com>
Co-authored-by: AArnott <3548+AArnott@users.noreply.github.com>
Copilot AI changed the title [WIP] Documenting InvalidOperationException for ReadLockAsync (and possibly other methods) Document InvalidOperationException for AsyncReaderWriterLock acquisition methods Jun 11, 2025
Copilot AI requested a review from AArnott June 11, 2025 02:55
@AArnott

AArnott commented Jun 11, 2025

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@AArnott AArnott marked this pull request as ready for review June 11, 2025 03:12
@AArnott AArnott requested review from davkean and lifengl June 11, 2025 03:13
@AArnott AArnott enabled auto-merge (squash) June 11, 2025 12:09
This was referenced Jun 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Documenting InvalidOperationException for ReadLockAsync (and possibly other methods)

4 participants