Pelo que entendi o assincronismo envolve basicamente três métodos:
- o método que eu não quero que fique com a execução bloqueada no caso abaixo o Metodo1();
- o método com o "async void" (ou Task<>, ou apenas Task) na assinatura, o Metodo2();
- o método chamado dentro de async com a palavra chave await antes da chamada, o Metodo3().
Com isso o método que não fica parado é o 1 pois o 2 ficará parado aguardando a conclusão do processamento no Metodo3(). Seria isso né? Corrijam me se estiver errado. E por isso teoricamente a saida deveria ser:
- Inicio do Metodo1();
- Início do Metodo2();
- Após a chamada do Metodo2();
- Após executar o Metodo3().
Exemplo:
public void Metodo1()
{
Console.WriteLine("Início do Metodo1()");
Metodo2();
Console.WriteLine("Após a chamada do Metodo2()");
}
public async void Metodo2()
{
Console.WriteLine("Início do Metodo2()");
await Metodo3();
Console.WriteLine("Após executar o Metodo3()");
}