¿Qué ocurre realmente cuando haces `await` sobre un `Task`?
El compilador reescribe el método como una máquina de estados: el código antes del await se ejecuta de forma síncrona, y si la tarea todavía no terminó, el método devuelve el control a quien lo llamó de inmediato y libera el hilo en lugar de bloquearlo. La continuación se retoma cuando la tarea termina, por defecto en el SynchronizationContext capturado, por eso el código de librería llama a ConfigureAwait(false) para evitar deadlocks y cambios de contexto innecesarios.