I was experimenting with async-await and I came across this rather strange behavior, at least to me.
I created three methods that simulated long running tasks.
Consider the two button click handlers: 
For button1_click the time elapsed was around 6000ms while button2_click around 3000ms. 
I am not able to wrap my head around why this happened, i.e. 6000ms vs 3000ms.
    private async Task<string> TaskOne()
    {
        await Task.Delay(1000);
        return "task one";
    }
    private async Task<string> TaskTwo()
    {
        await Task.Delay(2000);
        return "task two";
    }
    private async Task<string> TaskThree()
    {
        await Task.Delay(3000);
        return "task three";
    }
    
    //time elapsed = 6000+ms
    private async void button1_Click(object sender, EventArgs e)
    {
        var watch = new Stopwatch();
        watch.Start();
        await TaskOne();
        await TaskTwo();
        await TaskThree();
        
        watch.Stop();
        textBox3.Text = watch.ElapsedMilliseconds.ToString();
    }
    //time elapsed = 3000+ms
    private async void button2_Click(object sender, EventArgs e)
    {
        var watch = new Stopwatch();
        watch.Start();
        var taskOne = TaskOne();
        var taskTwo = TaskTwo();
        var taskThree = TaskThree();
        await taskOne;
        await taskTwo;
        await taskThree;
        
        watch.Stop();
        textBox3.Text = watch.ElapsedMilliseconds.ToString();
    }
 
     
     
    