GitHub - Fody/ConfigureAwait: Configure async code's ConfigureAwait at a global level (original) (raw)
Configure async code's ConfigureAwait at a global level.
See Milestones for release notes.
This is an add-in for Fody
It is expected that all developers using Fody become a Patron on OpenCollective. See Licensing/Patron FAQ for more information.
Usage
See also Fody usage.
NuGet package
Install the ConfigureAwait.Fody NuGet package and update the Fody NuGet package:
PM> Install-Package Fody
PM> Install-Package ConfigureAwait.Fody
The Install-Package Fody is required since NuGet always defaults to the oldest, and most buggy, version of any dependency.
How to use it
By default, ConfigureAwait.Fody doesn't change any code. Set a configure await value at the assembly, class, or method level.
[assembly: Fody.ConfigureAwait(false)]- Assembly level[Fody.ConfigureAwait(false)]- Class or method level
Explicitly configured awaiters will not be overwritten by the weaver, allowing exceptions to the Assembly / Class / Method level setting.
Add to FodyWeavers.xml
Add <ConfigureAwait/> to FodyWeavers.xml
It is also possible set the default ContinueOnCapturedContext in the xml config:
Configure once for a whole solution
To share the same setting across every project in a solution, instead of adding the attribute or a FodyWeavers.xml to each project, use Fody's WeaverConfiguration MSBuild property in a Directory.Build.props at the root of the solution:
WeaverConfiguration overrides any per-project FodyWeavers.xml, and supports MSBuild property interpolation ($(SomeProperty)) and Condition attributes, so the value can vary by build configuration.
Example
Before code
using Fody;
[ConfigureAwait(false)] public class MyAsyncLibrary { public async Task MyMethodAsync() { await Task.Delay(10); await Task.Delay(20).ConfigureAwait(true); }
public async Task AnotherMethodAsync()
{
await Task.Delay(30);
}}
What gets compiled
public class MyAsyncLibrary { public async Task MyMethodAsync() { await Task.Delay(10).ConfigureAwait(false); await Task.Delay(20).ConfigureAwait(true); }
public async Task AnotherMethodAsync()
{
await Task.Delay(30).ConfigureAwait(false);
}}
Icon
Created by Dmitry Baranovskiy from The Noun Project.