Por que tenho que usar aguardar que um método seja executado de forma assíncrona. E se eu não quiser esperar o método terminar antes de continuar? [duplicado]

Esta pergunta já tem uma resposta aqui:

Acenda e esqueça com async vs "antigo delegado assíncrono" 4 respostas

Venho pesquisando os documentos do MSDN o dia todo, e a filosofia deles de codificação assíncrona está me confundindo. Pelo que entendi, o thread que chama o método assíncrono não será bloqueado se o método assíncrono for chamado. No entanto, o async é sempre emparelhado nos exemplos com wait, o que parece negar o async-ness, fazendo com que o método externo tenha que aguardar a execução do código de qualquer maneira. Não devo chamar um método assíncrono e continuar com a execução do método externo?

Este é o cenário que eu tenho encontrado, mais ou menos:

void reportSomethingHappened(info)
    - Collect info
    - HTTP POST info to logging server (ie. mixpanel, sentry)

E aqui seria um método de chamada:

void largerProcess
    if (whatever)
        reportSomethingHappened();
    bla;
    bla;

Pelo que entendi, como as solicitações POST podem ser feitas de forma assíncrona, eu devo transformar reportSomethingHappened () em um método assíncrono (por AFAIK, aguardando o pedido da web e adicionando a palavra-chave async).

Mas o método largeProcess não precisa esperar (ou seja, aguardar) que o método de relatório seja concluído para executar bla bla. No entanto, o VS me diz que, com um método assíncrono, posso aguardá-lo ou isso acontecerá de forma síncrona e bloqueará. Isso não derrota o propósito de fazê-lo separadamente?

Como escrevo isso para que reportSomethingHappened não bloqueie a execução de largeProcess? (O que é inerentemente me confundir, porque eu pensei que era o ponto de assíncrona o tempo todo)

questionAnswers(1)

yourAnswerToTheQuestion