whenall run method explained español ejemplos ejemplo create await async c# .net debugging exception-handling async-await

c# - run - DebuggerStepThrough, DebuggerHidden no funciona en un método async-await



task whenall c# (1)

Los atributos no funcionan bien con async / await ya que los métodos asíncronos se vuelven a escribir debajo de las cubiertas, y los atributos no siguen. Consulte https://stackoverflow.com/a/22412597/495262 para una situación similar.

Cuando activa la función "Interrumpir cuando se lanza una excepción" en el depurador de Visual Studio, se divide en todas partes para los tipos de excepción seleccionados. La forma de decirle que no se rompa en un método específico es decorar estos métodos con el atributo DebuggerStepThrough (o DebuggerHidden ) .

Esto, evidentemente , no funciona para un método async por alguna razón. Aquí hay un fragmento que reproduce el problema. El depurador se romperá dentro de TestAsync aunque esté marcado con los atributos y no se rompa dentro de Test como exceptuado (la única diferencia entre ellos es que el primero está marcado con la palabra clave async ):

public class Attributes { public async Task Run() { await TestAsync(); await Test(); } [DebuggerHidden] [DebuggerStepThrough] public async Task TestAsync() { try { throw new Exception("Async"); } catch { } await Task.Delay(100); } [DebuggerHidden] [DebuggerStepThrough] public Task Test() { try { throw new Exception("sync"); } catch { } return Task.Delay(100); } }

Entonces, ¿se pretende este comportamiento? ¿Es un error? ¿Hay alguna solución?