C# – This async method lacks ‘await’ operators and will run synchronously

async-awaitasynchronousc

my program has 3 warnings of the following statement:

This async method lacks 'await' operators and will run synchronously.
Consider using the 'await' operator to await non-blocking API calls,
or 'await Task.Run(…)' to do CPU-bound work on a background thread.

What is the warning try to tell me? What should I do?

This is my code: Is it running using multi-threading?

static void Main(string[] args)
{
    Task task1 = new Task(Work1);
    Task task2 = new Task(Work2);
    Task task3 = new Task(Work3);

    task1.Start();
    task2.Start();
    task3.Start();

    Console.ReadKey();
}

static async void Work1()
{
    Console.WriteLine("10 started");
    Thread.Sleep(10000);
    Console.WriteLine("10 completed");
}

static async void Work2()
{
    Console.WriteLine("3 started");
    Thread.Sleep(3000);
    Console.WriteLine("3 completed");
}

static async void Work3()
{
    Console.WriteLine("5 started");
    Thread.Sleep(5000);
    Console.WriteLine("5 completed");
}

Best Answer

The async keyword, by itself, doesn't really do much. Remove it from your code and your code will act exactly the same.

What does async do?

  • It changes what's valid inside of the method, specifically it allows you to use the await keyword
  • In turn, it means that the body of the method will be transformed, based on the awaits that are present in the body of the method.
  • And if the method returns a value, the method is also transformed to wrap the return value in a Task.

However, if you a) Don't have any awaits in your method body and b) are void returning, then nothing special will be achieved. The compiler warning does try to be clear about this - an async method without any awaits just plain doesn't make sense. awaits are the more important part of this feature.