DebuggerStepThrough, DebuggerHidden ne fonctionnent pas dans une méthode async-wait

Lorsque vous activez la fonctionnalité “Interrompre lorsqu’une exception est levée” dans le débogueur de Visual Studio, elle se bloque partout pour les types d’exceptions sélectionnés. La meilleure façon de lui éviter de pénétrer dans une méthode spécifique consiste à décorer ces méthodes avec l’atsortingbut DebuggerStepThrough (ou DebuggerHidden ) .

Ceci, évidemment , ne fonctionne pas pour une méthode async pour une raison quelconque. Voici un extrait qui reproduit le problème. Le débogueur s’interrompra dans TestAsync même s’il est marqué avec les atsortingbuts et ne sera pas interrompu dans Test sauf exception (la seule différence entre eux est que le premier est marqué par le mot clé async ):

 public class Atsortingbutes { 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); } } 

Alors, ce comportement est-il voulu? Est-ce un bug? Y at-il un travail autour?

Les atsortingbuts ne fonctionnent pas bien avec async / wait car les méthodes asynchrones sont réécrites sous les couvertures – et les atsortingbuts ne suivent pas. Voir https://stackoverflow.com/a/22412597/495262 pour une situation similaire.