In the code that relies on the asynchronous programming model (
ConfigureAwait() calls are often used to manage the synchronization context.
ConfigureAwait() calls work and their usage scenarios are explained in detail in this Microsoft .NET Blog article as well as in many other posts that you can find on the Internet, but the usage advice for
ConfigureAwait() boils down to the following:
To improve performance and avoid potential deadlocks, use
ConfigureAwait(false)in any non-UI code.
ConfigureAwait(true)corresponds to the default behavior and does nothing meaningful, therefore such calls can be safely omitted.
To analyze usages of
ConfigureAwait(), ReSharper needs to know whether it is application-level code or general-purpose library code. By default, the ConfigureAwait analysis is disabled and you need to enable the analysis in each project choosing one of the two modes:
Library mode — ReSharper will suggest adding
ConfigureAwait(false)calls to awaitables.
UI mode — ReSharper will report
ConfigureAwait(true)calls as redundant.
Enable ConfigureAwait analysis and choose its mode
To enable ConfigureAwait analysis in a project, right-click the project in the Solution Explorer, select Library or UI., and then choose
To enable ConfigureAwait analysis in the current project, set the caret at any
awaitkeyword, press Alt+Enter, select ConfigureAwait analysis and then choose Library or UI.
If you use EditorConfig, you can specify the ConfigureAwait analysis mode for a project, a folder, or a file with the following properties:
configure_await_analysis_mode = libraryor
configure_await_analysis_mode = ui.
The ConfigureAwait analysis relies on two code inspections: Redundant 'ConfigureAwait(true)' in the UI mode and Missing '.ConfigureAwait(false)' in library code in the Library mode. Make sure that these inspections are enabled on the page of ReSharper options (Alt+R, O).
To fine-tune the analysis, you can enable it in a project and then suppress these inspections in places that should be ignored.