Когда я перешагнул точки останова в своем коде, я столкнулся со странным поведением отладчика:
public async Task DoSomeWork()
{
await Task.Run(() => { Thread.Sleep(1000); });
var test = false;
if (test)
{
throw new Exception("Im in IF body!");
}
}
Отладчик переходит в тело if
. Примечательно, что исключение на самом деле не выбрасывается, а просто выглядит так. Таким образом, вы не сможете воспроизвести это, если поместите точку останова прямо на throw
. Вы должны поместить его выше и спуститься к телу if
, чтобы поймать его. То же самое работает с любым экземпляром исключения (а также с явным null
) и даже с return
вместо throw
.
Кроме того, это работает, даже если я удаляю строку с await
.
Я пытался запустить этот фрагмент кода с разных компьютеров, так что это не проблема ПК. Также я подумал, что это ошибка в коде VS, и попытался запустить его в Rider от JetBrains - результат тот же.
Я уверен, что это асинхронная вещь, но как это работает явно?