Comportamiento extraño del depurador en el método asíncrono

Cuando superé los puntos de interrupción en mi código, me encontré con un comportamiento extraño del depurador:

public async Task DoSomeWork()
{
     await Task.Run(() => { Thread.Sleep(1000); });

     var test = false;
     if (test)
     {
          throw new Exception("Im in IF body!");
     }
}

El depurador entra enif cuerpo. Es notable que la excepción no sea realmente lanzada, sino que simplemente parezca. Por lo tanto, no puede reproducir eso si coloca el punto de interrupción justo enthrow. Debe colocarlo arriba y bajar alif cuerpo para atraparlo. Lo mismo funciona en cualquier tipo de instancia de excepción (así como explícitanull) e incluso enreturn en lugar dethrow.

Además de eso funciona incluso si elimino la línea conawait.

Traté de ejecutar este fragmento de código desde diferentes PC para que no sea un problema de PC. También pensé que es un error en el código VS e intenté ejecutarlo en Rider desde JetBrains, el mismo resultado.

Estoy seguro de que es lo asíncrono, pero ¿cómo funciona explícitamente?

Respuestas a la pregunta(1)

Su respuesta a la pregunta