Benefícios do uso assíncrono e aguardar palavras-chave

Eu sou novo no uso de métodos assíncronos em c #. Eu li que essas palavras-chaveasync eawait ajude a tornar o programa mais responsivo assinando alguns métodos. Eu tenho este trecho:

Primeira Via

    public static void Main()
    {
        Console.WriteLine("Hello!! welcome to task application");
        Console.ReadKey();
        Task<string> ourtask = Task.Factory.StartNew<string>(() =>
        {
            return "Good Job";
        });
        ourtask.Wait();
        Console.WriteLine(ourtask.Result);
        Console.ReadKey();
    }

Segunda Via

 public static void Main()
        {
            Launch();
        }
        public static async void Launch()
        {
            Console.WriteLine("Hello!! welcome to task application");
            Console.ReadKey();
            Console.WriteLine(await GetMessage());
            Console.ReadKey();
        }

        public static Task<string> GetMessage()
        {
            return Task.Factory.StartNew<string>(() =>
                {
                    return "Good Job";
                });
        }

Eu preciso saber :

Existe uma diferença entre as duas implementações (no conceito de paralelismo)?

Quais são os benefícios de usarasync eawait palavras-chave se eu puder apenas criar uma tarefa e esperar que ela termine?

questionAnswers(4)

yourAnswerToTheQuestion