Предположим, что у меня есть следующий код...
try
{
await Task.Run(() => autobuyandsell.Discard_Players(client, this));
if (stop == false)
{
await Task.Run(() => autobuyandsell.Buy_300_Players(client, this));
}
}
catch (ExpiredSessionException ex)
{
relogin = true;
b_stop.PerformClick();
}
Внутри autobuyandsell ExpiredSessionException может возникать, когда я вызываю некоторые методы, которые могут вызывать это исключение. Мой вопрос: мне нужно добавить еще один блок try/catch внутри функции или достаточно для обработки extern Exception?
Ответ принят:
Поскольку единственная необходимость моей программы - выйти из метода и перезапустить некоторые переменные, я решил использовать try/catch вне метода.
Вы поймаете их, как только у вас есть это сейчас, но вы не будете "знать", если/сколько из ваших Discard_Players
или buy_300_Players
выполнено, и в какой момент произошло исключение и т. Discard_Players
buy_300_Players
может быть плохой идеей.
Например, если эти методы сохраняют состояние на диске/базе данных, вы не будете "знать", если это произошло или нет.
(Я продолжаю использовать кавычки на "знаю", потому что, по-моему, можно было бы допросить стек вызовов и т.д., Когда поймал Исключение, чтобы узнать, где он был поднят, чтобы найти эти вещи, но это будет довольно беспорядочно! )
если вы поймаете их INSIDE методами, которыми вы можете управлять, как они обрабатываются (возможно, уничтожить любые данные, которые вы сохранили, прежде чем бросать их снова, чтобы вы могли начать заново, например) намного лучше.
Поэтому в зависимости от функциональности этих двух функций вы должны решить, какой подход лучше всего подходит для ВАШЕГО приложения
Discard_Players
иBuy_300_Players
(с нетрадиционным названием, кстати) продолжались после исключения? Если это так, вам нужно поймать исключения в этих методах. В противном случае вы можете поймать их в своем коде вызова.