I wrote two recursive functions that sum numbers from a array. They do the same thing, one asynchronously and the other synchronously. The async function took about 9x the time the sync one did. 
Shouldn't the async function take advantage from the fact of running more tasks at the same time?
The functions
// Asynchronously sum the numbers in array
async function sumAsync(arr){
    if(arr.length == 1) return arr[0];
    const half = arr.length/2;
    // Numbers on the left half
    const left = arr.filter((e, i) => {
        return i < half;
    });
    // Numbers on the right half
    const right = arr.filter((e, i) => {
        return i >= half;
    });
    // Recursive call
    const leftR = sumAsync(left);
    const rightR = sumAsync(right);
    // Wait for resolves
    await Promise.all([leftR, rightR]);
    return await leftR + await rightR;
}
// Synchronously sum the numbers in array
function sumSync(arr){
    if(arr.length == 1) return arr[0];
    const half = arr.length/2;
    // Numbers on the left half
    const left = arr.filter((e, i) => {
        return i < half;
    });
    // Numbers on the right half
    const right = arr.filter((e, i) => {
        return i >= half;
    });
    // Recursive call
    const leftR = sumSync(left);
    const rightR = sumSync(right);
    return leftR + rightR;
}
Testing them
(async () => {
    const LENGTH = 1048576; // 1024^2
    const arr = Array.from(Array(LENGTH), num => Math.random()*10 | 0);
    //  arr[1048576] <- random (0 ~ 9)
    // Async sum
    console.log('ASYNC');
    before = Date.now();
    console.log(`SUM: ${await sumAsync(arr)}`);
    after = Date.now();
    console.log(`TIME: ${after - before} ms`);
    // Sync sum
    console.log('SYNC');
    before = Date.now();
    console.log(`SUM: ${sumSync(arr)}`);
    after = Date.now();
    console.log(`TIME: ${after - before} ms`);
})();
Results
// ASYNC
// SUM: 4720832
// TIME: 5554 ms
// SYNC
// SUM: 4720832
// TIME: 613 ms
 
     
    