DebuggerStepThrough, DebuggerHidden não funciona em um método de espera assíncrona
Quando você liga o"Quebrar quando uma exceção é lançada" recurso no depurador do Visual Studio, ele quebra em todos os lugares para os tipos de exceção selecionados. A maneira de dizer para não interromper um método específico édecorar esses métodos comDebuggerStepThrough
atributo (ouDebuggerHidden
).
Este,evidentemente, não funciona para umasync
por algum motivo. Aqui está um trecho que reproduz o problema. O depuradorvai quebrar dentro doTestAsync
mesmo que esteja marcado com os atributos enão quebrar por dentroTest
conforme exceto (a única diferença entre eles é a primeira é marcada com oasync
palavra-chave):
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);
}
}
Então, esse comportamento é pretendido? Isso é um bug? Existe uma solução alternativa?