Usando async / wait para várias tarefas

Estou usando um cliente API completamente assíncrono, ou seja, cada operação retornaTask ouTask<T>, por exemplo:

static async Task DoSomething(int siteId, int postId, IBlogClient client)
{
    await client.DeletePost(siteId, postId); // call API client
    Console.WriteLine("Deleted post {0}.", siteId);
}

Usando os operadores async / wait do C # 5, qual é a maneira correta / mais eficiente de iniciar várias tarefas e esperar que todas sejam concluídas:

int[] ids = new[] { 1, 2, 3, 4, 5 };
Parallel.ForEach(ids, i => DoSomething(1, i, blogClient).Wait());

ou:

int[] ids = new[] { 1, 2, 3, 4, 5 };
Task.WaitAll(ids.Select(i => DoSomething(1, i, blogClient)).ToArray());

Como o cliente da API está usando HttpClient internamente, eu esperaria que isso emitisse 5 solicitações HTTP imediatamente, gravando no console à medida que cada um fosse concluído.

questionAnswers(5)

yourAnswerToTheQuestion