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 respostasVenho 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)