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?