Why the tasks
are executed before Task.WhenAll
??
If you see here, from the below code snippet, first Console.WriteLine("This should be written first..");
should be printed because I am awaiting
the tasks beneath to it..
But if you see the output result, the Tasks
method result is being printed before the above statement. Ideally, the tasks method should be executed when I await
them, but it seems that- the tasks methods are executed the moment I add them in tasks list. Why is it so?
Would you please do let me know why is this happening??
Code:
public static async Task Test()
{
var tasks = new List<Task>();
tasks.Add(PrintNumber(1));
tasks.Add(PrintNumber(2));
tasks.Add(PrintNumber(3));
Console.WriteLine("This should be written first..");
// This should be printed last..
await Task.WhenAll(tasks);
}
public static async Task PrintNumber(int number)
{
await Task.FromResult(0);
Console.WriteLine(number);
}
Output
When you call an async
method you get a "hot" task in return. That means that the task already started running (and maybe even completed) before you get to await
them. That means that it's quite possible for the tasks to run and complete before the call to Task.WhenAll
.
In your case however, while the PrintNumber
is marked async
it isn't asynchronous at all since you're using Task.FromResult
. The synchronous part of an asynchronous method (which is the part until you await an asynchronous task) is always executed synchronously on the calling thread and is done before the call returns. When you use Task.FromResult
you get a completed task so all your method is just the synchronous part and is completed before the call returns.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With