C#で時間のかかるA処理B処理の合間にちょっとした処理をして
その後、処理A・処理Bが完了したら次の処理を行う場合
using System;
using System.Threading.Tasks;
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
stopwatch.Start();
// 時間のかかる処理
var taskA = MethodA();
Console.WriteLine("ちょっとした処理①");
// 別の時間のかかる処理
var taskB = MethodB();
Console.WriteLine("ちょっとした処理②");
// A, Bの完了を待つ
await Task.WhenAll(taskA, taskB);
Console.WriteLine("A,Bの結果を使って次の処理を実行");
stopwatch.Stop();
Console.WriteLine($"処理時間: {stopwatch.ElapsedMilliseconds / 1000} s");
static async Task MethodA()
{
    await Task.Delay(5000);
    Console.WriteLine("MethodA完了");
}
static async Task MethodB()
{
    await Task.Delay(5000);
    Console.WriteLine("MethodB完了");
}
こんな感じになり、実行結果は、以下のようになる
ちょっとした処理①
ちょっとした処理②
MethodA完了
MethodB完了
A,Bの結果を使って次の処理を実行
処理時間: 5 s
これをJavaScriptでどう書くのか知りたかった。
(async () => {
    const start = Date.now();
    // 時間のかかる処理
    const taskA = methodA();
    console.log("ちょっとした処理①");
    // 別の時間のかかる処理
    const taskB = methodB();
    console.log("ちょっとした処理②");
    // A, Bの完了を待つ
    await Promise.all([taskA, taskB]);
    console.log("A,Bの結果を使って次の処理を実行");
    const elapsed = (Date.now() - start) / 1000;
    console.log(`処理時間: ${elapsed} s`);
})();
async function methodA() {
    await new Promise(resolve => setTimeout(resolve, 5000)); // 5秒
    console.log("methodA完了");
}
async function methodB() {
    await new Promise(resolve => setTimeout(resolve, 5000)); // 5秒
    console.log("methodB完了");
}
ちょっとした処理①
ちょっとした処理②
methodA完了
methodB完了
A,Bの結果を使って次の処理を実行
処理時間: 5.007 s