Diferencia entre tarea y asíncrono

C # proporciona dos formas de crear métodos asincrónicos:

Método 1:

static Task<string> MyAsyncTPL() {
  Task<string> result = PerformWork();
  return result.ContinueWith(t => MyContinuation());
}

Método 2:

static async Task<string> MyAsync() {
  string result = await PerformWork();
  return MyContinuation();
}

Ambos métodos anteriores son asíncronos y logran lo mismo. Entonces, ¿cuándo debo elegir un método sobre el otro? ¿Existen pautas o ventajas de usar una sobre la otra?

Respuestas a la pregunta(2)

Su respuesta a la pregunta