Я делаю это:
public async Task Update(Entity input)
{
ValidateUpdate(input);
await UpdateAsync(input);
}
public async void ValidateUpdate()
{
// Some Logic
int adminCount = await _dbContext.AdminEntities
.CountAsync();
if (adminCount == 0)
{
throw new AppUserException("The tenant must always have at least one admin.");
}
}
И когда я нажимаю исключение, Visual Studio показывает его мне, но затем, когда я нажимаю «Продолжить выполнение», VS показывает мне страницу «Приложение находится в режиме приостановки». Если я снова нажму «Продолжить выполнение», VS просто перестанет запускать приложение. Когда я выбрасываю такое же исключение в других частях своего приложения, оно просто возвращается как ответ на мой HTTP-запрос. Я не понимаю, почему.
Я обнаружил проблему, потому что я сделал свой метод асинхронным, не изменив тип возвращаемого значения void
на Task
и не дожидаясь проверки.
Это фиксированный пример:
public async Task Update(Entity input)
{
await ValidateUpdateAsync(input);
await UpdateAsync(input);
}
public async Task ValidateUpdateAsync()
{
// Some Logic
int adminCount = await _dbContext.AdminEntities
.CountAsync();
if (adminCount == 0)
{
throw new AppUserException("The tenant must always have at least one admin.");
}
}
Я торопился и забыл проверить основы. Я надеюсь, что это, по крайней мере, поможет кому-то еще или мне самому в будущем, когда я неизбежно совершу ту же ошибку снова.
Да, мне пришлось подождать пару дней, прежде чем я смог принять ответ. Даже если он был моим собственным. Я просто отметил это как ответ, спасибо за напоминание!
Здравствуйте, рад узнать, что вы нашли решение этой проблемы! Пожалуйста, примите его как ответ, чтобы изменить его статус на «Отвечено». См. можно я сам отвечу на свой вопрос.., просто напоминание :)