AsyncFixer 1.0.0

AsyncFixer helps developers in finding and correcting 3 common async/await misuses (anti-patterns). AsyncFixer was tested with hundreds of C# apps and successfully handles many corner cases.

AsyncFixer (the nuget package) will work as a project-local analyzer that participates in builds. Attaching an analyzer to a project means that the analyzer travels with the project to source control and so it's easy to apply the same rule for the team. It also means that commandline builds report the issues reported by the analyzer.

If you want AsyncFixer to work just in the IDE and to work as an analyzer on every project you open in Visual Studio, please download the VSIX extension instead of this nuget package from here:

Here are 3 misuses that AsyncFixer detects:

1) Unnecessary async/await Methods

There are some async methods where there is no need to use async/await. It is important to detect this kind of misuse because adding the async modifier comes at a price.

AsyncFixer removes async/await keywords from these methods.

2) Using Long-running Operations under Async Methods

Developers use some potentially long running or blocking operations under async methods even though there are corresponding asynchronous versions of these methods in .NET or third-party libraries. Some example for such operations: Task.Wait(), Task.Result, Task.WaitAll(...), StreamReader.ReadToEnd(...), Thread.Sleep(...), etc.

AsyncFixer automatically replaces these operations with their corresponding asynchronous operations and inserts 'await' expression. For instance, it converts Thread.Sleep(...) to await Task.Delay(...).

3) Fire & Forget Methods

Some async methods are 'fire&forget', which return void. Unless a method is only called as an event handler, it must be awaitable. Otherwise, it is a code smell because it complicates control flow and makes error detection & correction difficult.

AsyncFixer replaces the return type of the (non-event handler) method with 'Task'.

4) Decide the use of ConfigureAwait(false)

AsyncFixer checks whether the method and its call graph will ever need the UI or Request (ASP.NET) context at all. AsyncFixer decides the need for ConfigureAwait(false) in the await statement(s) in the method body.

It's coming soon!

*** Important ***

The detection and fixing of more async/await misuses are being implemented.

Please send your bug report or feedback to

Learn more information about these misuses from our website: LearnAsync.NET

There is a newer version of this package available.
See the version list below for details.
Install-Package AsyncFixer -Version 1.0.0
dotnet add package AsyncFixer --version 1.0.0
<PackageReference Include="AsyncFixer" Version="1.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add AsyncFixer --version 1.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Release Notes

Updated for Visual Studio 2015 RTM.


This package has no dependencies.

Showing the top 5 GitHub repositories that depend on AsyncFixer:

Repository Stars
Exceptionless server and jobs
Pluggable foundation blocks for building distributed apps.
Vkontakte API for .NET
OAuth2 client implementation for .NET
MinIO Client SDK for .NET

Read more about the GitHub Usage information on our documentation.

Version History

Version Downloads Last updated
1.1.6 183,125 2/12/2018
1.1.5 42,862 2/21/2017
1.1.4 23,481 9/6/2016
1.1.3 50,294 3/23/2016
1.1.2 572 3/21/2016
1.1.1 624 3/19/2016
1.1.0 656 3/13/2016
1.0.0 1,169 7/29/2015
0.9.0 1,169 2/14/2015
Show less