I am trying to wrap my head around the proper way to call asynchronous tasks. Consider the following code:
var stopWatch = new Stopwatch();
// TEST 1 AWAITS THE ASYNC TASKS DIRECTLY
stopWatch.Start();
Console.WriteLine($"Test 1 Begin: {stopWatch.ElapsedMilliseconds}");
await Task1(stopWatch);
await Task2(stopWatch);
Console.WriteLine($"Test 1 End: {stopWatch.ElapsedMilliseconds}");
Console.WriteLine();
Console.WriteLine();
stopWatch.Restart();
// TEST 2 CREATES A LOCAL VARIABLE OF THE TASK THEN AWAITS THE LOCAL VARIABLE
Console.WriteLine($"Test 2 Begin: {stopWatch.ElapsedMilliseconds}");
var task1 = Task1(stopWatch);
var task2 = Task2(stopWatch);
await task1;
await task2;
Console.WriteLine($"Test 2 End: {stopWatch.ElapsedMilliseconds}");
async Task Task1(Stopwatch stopWatch)
{
Console.WriteLine($"Task 1 Start: {stopWatch.ElapsedMilliseconds}");
await Task.Delay(2000);
Console.WriteLine($"Task 1 End: {stopWatch.ElapsedMilliseconds}");
}
async Task Task2(Stopwatch stopWatch)
{
Console.WriteLine($"Task 2 Start: {stopWatch.ElapsedMilliseconds}");
await Task.Delay(2000);
Console.WriteLine($"Task 2 End: {stopWatch.ElapsedMilliseconds}");
}
TEST 1 total time: 4 seconds
TEST 2 total time: 2 seconds
Why is TEST 1 running synchronously and TEST 2 is running asynchronously?