Fix InvalidOperationException in Selectors when running parallel tests #3208
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
A common pattern we use in other places: https://github.com/search?q=repo%3Amicrosoft%2Fplaywright-dotnet+%2Fforeach.*s%5C.ToArray%5C%28%5C%29%5C%29%2F&type=code
Fixes a thread safety issue in
Selectors.csthat causesSystem.InvalidOperationException: Collection was modified; enumeration operation may not executewhen running tests in parallel.Problem
The issue occurs in two methods in the
Selectorsclass:SetTestIdAttribute()at line 70RegisterAsync()at line 56Both methods enumerate over the
_contextsForSelectorslist while other threads may be modifying it (adding/removing browser contexts), causing the classic collection modification exception.The
_contextsForSelectorslist is modified by:Browser.ConnectToBrowserType()andBrowser.DidCreateContext()- adds contextsBrowserContext.OnClose()- removes contextsSolution
Create a snapshot of the list before enumeration using
ToArray()to prevent the collection modification exception:This approach:
Fixes #3207.
💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.