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.
This analyzer was coded up to exhaustively search the entire global namespace of symbols for GetAwaiter methods for every single invocation in the compilation. Ugh.
Since VSTHRD200 was using the same slow code as the 110 analyzer, I also re-coded VSTHRD200. But VSTHRD200 isn't an IOperation analyzer so the SemanticModel isn't available, so the solution we use for both is a (slightly faster) exhaustive search for all
GetAwaiter
methods, which we then cache and reuse throughout the Compilation instead of reconstructing for every invocation.In ETL traces, this brought the VSTHRD110 analyzer contribution to the build time of the StreamJsonRpc repo down from 5 seconds to 1. The time it takes is now mostly proportional to the number of projects (and the number of their references) rather than proportional to the size of the project itself.
Fixes #971