Skip to content

Plugin for resharper, for converting code for async.

License

Notifications You must be signed in to change notification settings

nasa03/AsyncConverter

 
 

Repository files navigation

AsyncConverter

This is an implementation of a ReSharper Plugin that converts your synchronous code to its asynchronous version and helps you to write your own asynchronous applications.

Convert Any Method to Its Async Implementation

AsyncConverter can:

  1. Replace a returning type with generic or non-generic Task<T> or Task
  2. Rename a hierarchy of overridden methods from <MethodName> to <MethodName>Async
  3. Add the System.Threading.Tasks to a usings declaration
  4. Analyze a method body and replace the every synchronous call with its async implementation if exists.
  5. Analyze a method body and replace the every .Result call with the await call.
  6. Analyze usage of a processed method. If the method is called from async context the AsyncConverter will replace its call with the await expression, otherwise it will just call .Result or .Wait()
Converter method to async demo
![Converter method to async](ReadMe/MethodToAsyncConverter.gif)

Highlightings

Convert Wait() and Result to await

Under async method replace Wait() and Result to await.

Replace wait to await demo
![Replace wait to await](ReadMe/ReplaceWait.gif)
Replace result to await demo
![Replace result to await](ReadMe/ReplaceResult.gif)

Return null as Task

If expected returning type is Task or Task<T> but null is returned instead, AsyncConverter warn you that execution point can await expected 'Task' and get NullReferenceException.

Return null as task demo
![Return null as task](ReadMe/ReturnNullAsTask.gif)

Async suffix in a method name

AsyncConverter will suggest you to add the Async suffix to an asynchronous method name in all cases except:

  1. Classes inherited from Controller or ApiController
  2. Methods of test classes. NUnit, XUnit and MsUnit are supported. This may be turn off in Resharper → Options → Code Inspection → Async Converter → Async Suffix
Suggesting method name with Async suffix demo
![Suggesting method name with Async suffix](ReadMe/Naming.gif)

Suggesting to configure an every await expression with ConfigureAwait

Suggesting ConfigureAwait demo
![Suggesting ConfigureAwait](ReadMe/ConfigureAwait.gif)

Suggesting to use the async method if exists

If a synchronous method is called in the async context and its asynchronous implementation exists (e.g method has same signature Async suffix and Task or Task<T> as the returning type) AsyncConverter will suggest you to use this asynchronous implementation.

Do not suggest to use obsolete async methods.

Suggesting method name with Async suffix demo
![Suggesting method name with Async suffix](ReadMe/CanBeUseAsyncMethod.gif)

Async/await ignoring

An await expression can be ignored if this await expression is the single in a method and awaited value is returned from a method.

Async/await ignoring demo
![Async/await ignoring](ReadMe/AsyncAwaitMayBeElided.gif)

About

Plugin for resharper, for converting code for async.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 97.5%
  • PowerShell 1.3%
  • Shell 1.2%