Add and chain ConfigureAwait(false) on all awaits to allow blocking on async methods without deadlocking #456
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.
For general-purpose library code, adding ConfigureAwait(false) for every await allows .NET Framework applications that have a SynchronizationContext to call async code synchronously without deadlocking. The 'false' argument to ConfigureAwait allows the continuation to complete on any available thread in the pool and not just the original one. Since the context of the application is unknown to the library it can't use it anyway. To prevent future changes from reintroducing await's without a ConfigureAwait(false), the .editorconfig has been updated to treat these as errors and EnableNETAnalyzers added to the csproj. Tests are excluded from this rule as they are not expected to have a SynchronizationContext.
How this affects different applications:
Reference: https://devblogs.microsoft.com/dotnet/configureawait-faq/#when-should-i-use-configureawait(false)