Как обработать ошибку в await Task.Run?

#.net #asynchronous #error-handling

#.net #асинхронный #обработка ошибок

Вопрос:

Я пытаюсь вызвать метод GetOrders(id) с помощью await Task.Run() в async .net 5 API. Если метод GetOrders(id) выдает ошибку, я хочу, чтобы она отображалась до вызывающей асинхронной задачи GetIdAsny(int id). Но я всегда застреваю в try / catch внутри GetOrders, и ничего не всплывает. Я просто не понимаю. Спасибо за вашу помощь.

 public async Task<ActionResult<IEnumerable<Order>>> GetIdAsync(int id)
{
    try
    {
        return await Task.Run(() => getOrders(id));
    }
    catch (Exception exception)
    {
        //do something - never landing here
    }
}

private List<Order> getOrders(int id)
{
    try
    {
        List<Order> returnValue = new List<Order>();
        //doing something that produces an error
        return returnValue;
    }
    catch (Exception exception)
    {
        //always stuck here
        throw new Exception("getOrders("   id.ToString()   "):"   exception.Message);
    }
}
 

Комментарии:

1. Помимо вашей текущей проблемы, обычно плохая идея скрывать исходное исключение и только выводить его сообщение — лучше передать его как внутреннее исключение , чтобы оно сохраняло трассировку стека и т. Д.

2. @Damien_The_Unbeliever: спасибо за ваш вклад, в окончательной версии я сделаю это так, как вы рекомендуете.

3. Что именно вы подразумеваете под «застрял в try / catch»?