O que acontece de fato quando você faz `await` num `Task`?
O compilador reescreve o método como uma máquina de estados: o código antes do await roda de forma síncrona, e se a tarefa ainda não terminou, o método devolve o controle para quem chamou imediatamente e libera a thread em vez de bloqueá-la. A continuação é retomada quando a tarefa termina, por padrão no SynchronizationContext capturado, por isso código de biblioteca chama ConfigureAwait(false) para evitar deadlocks e trocas de contexto desnecessárias.