Когда вы включаете "Перерыв при вызове исключения" в отладчике Visual Studio, он везде разрывается для выбранных типов исключений. Способ сказать, чтобы не разбить конкретный метод: украсить эти методы с помощью атрибута DebuggerStepThrough
(или DebuggerHidden
).
Это, по-видимому, по какой-то причине не работает для метода async
.
Вот фрагмент, который воспроизводит проблему. Отладчик будет разбит внутри TestAsync
, даже если он будет отмечен атрибутами, и он не будет разбит внутри Test
как исключенный (единственная разница между ними - первая, отмеченная ключевым словом 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);
}
}
Итак, такое поведение предназначено? Это ошибка? Есть ли способ обхода?