== Why is this an issue?

According to the Task-based Asynchronous Pattern (TAP), methods returning  either a ``++System.Threading.Tasks.Task++`` or a ``++System.Threading.Tasks.Task<TResult>++`` are considered "asynchronous". Such methods should use the ``++Async++`` suffix. Conversely methods which do not return such Tasks should not have an "Async" suffix in their names.


=== Noncompliant code example

[source,csharp]
----
using System;
using  System.Threading.Tasks;

namespace myLibrary
{

  public class Foo
  {
    public Task Read(byte [] buffer, int offset, int count, // Noncompliant
                                CancellationToken cancellationToken)
  }
}
----


=== Compliant solution

[source,csharp]
----
using System;
using  System.Threading.Tasks;

namespace myLibrary
{

  public class Foo
  {
    public Task ReadAsync(byte [] buffer, int offset, int count, CancellationToken cancellationToken)
  }
}
----


=== Exceptions

This rule doesn't raise an issue when the method is an override or part of the implementation of an interface since it can not be renamed.

== Resources

* https://docs.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/task-based-asynchronous-pattern-tap[Task-based Asynchronous Pattern]



ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Add an "Async" suffix to the name of this method.

Remove the "Async" suffix from the name of this method.


=== Highlighting

Method name in declaration


'''
== Comments And Links
(visible only on this page)

=== on 10 Aug 2018, 16:07:12 Amaury Levé wrote:
Reduce the default severity to code smell as the worst case scenario is confusion for the end-user.

endif::env-github,rspecator-view[]
