This is an implementation of a ReSharper Plugin that converts your synchronous code to it's asynchronous version and helps you to write your own asynchronous applications.
AsyncConverter can:
- Replace a returning type with generic or non-generic
Task<T>
orTask
- Rename a hierarchy of overridden methods from <MethodName> to <MethodName>Async
- Add the
System.Threading.Tasks
to a usings declaration - Analyze a method body and replace the every synchronous call with it's
async
implementation if exists. - Analyze a method body and replace the every
.Result
call with theawait
call. - Analyze usage of a processed method. If the method is called from
async
context the AsyncConverter will replace it's call with theawait
expression, otherwise it will just call.Result
or.Wait()
In case that an expected returning type is Task<int>
but an actual returning type is int
, AsyncConverter will notice you that you can wrap a returning value with Task.FromResult()
.
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
AsyncConverter will suggest you to add the 'Async' suffix to an asynchronous method name in all cases except:
- Classes inherited from
Controller
orApiController
. - Methods of test classes. NUnit, XUnit and MsUnit are supported. This may be turn off in Resharper->Options->Code Inspection->Async Converter->Async Suffix
If a synchronous method is called in the async context and it's asynchronous implementation is exists (e.g method has same signature 'Async' suffix and 'Task' or 'Task' as the returning type) AsyncConverter will suggest you to use this asynchronous implementation.
Do not suggest to use obsolete async methods.
An 'await' expression can be ignored if this 'await' expression is the single in a method and awaited value is returned from a method.