Usando async / await para múltiples tareas

Estoy usando un cliente API que es completamente asíncrono, es decir, cada operación devuelveTask oTask<T>, p.ej:

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 los operadores asíncronos / a la espera de C # 5, ¿cuál es la forma correcta / más eficiente de iniciar múltiples tareas y esperar a que todas se completen:

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

o:

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

Dado que el cliente API está utilizando HttpClient internamente, esperaría que esto emitiera 5 solicitudes HTTP inmediatamente, escribiendo en la consola a medida que se completa cada una.

Respuestas a la pregunta(5)

Su respuesta a la pregunta