Reputation: 7969
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");
}
Upvotes: 24
Views: 66693
Reputation: 323
If you are overriding an async method with a sync method you can:
await Task.Run(() => [YOUR SYNC METHOD]);
Upvotes: 12
Reputation: 1669
You have used 'async
' keyword with method which indicates that Work1(),Work2() and Work3() methods are executed asynchronously,but you have not used 'await' keyword.So it executed as synchronously.Use 'await
' keyword if you want to execute it asynchronously.
static async void Work1()
{
Console.WriteLine("10 started");
await Task.Delay(10000);
Console.WriteLine("10 completed");
}
static async void Work2()
{
Console.WriteLine("3 started");
await Task.Delay(3000);
Console.WriteLine("3 completed");
}
static async void Work3()
{
Console.WriteLine("5 started");
await Task.Delay(5000);
Console.WriteLine("5 completed");
}
Upvotes: 5
Reputation: 239814
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?
await
keywordawait
s that are present in the body of the method.Task
.However, if you a) Don't have any await
s 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 await
s just plain doesn't make sense. await
s are the more important part of this feature.
Upvotes: 16
Reputation: 77364
Yes, your code will probably use multi-threading. However, it would still do so if you just removed the async
keyword. As you did not explain why it's there, I suggest removing it.
If you want an async/await pattern, you can use Task.Delay()
but I would suggest you read more on async/await before using it:
static async void Work3()
{
Console.WriteLine("5 started");
await Task.Delay(5000);
Console.WriteLine("5 completed");
}
Upvotes: 3
Reputation: 508
You designated your methods (Work1, Work2, Work3) with the keyword async
but none of your code within those methods uses the await
operator to invoke asynchronous calls.
Upvotes: 0