Я пишу приложение, что могу выполнять задачи с несколькими шагами. У меня есть код, похожий на то, что ниже, и я хочу знать, является ли это обычным способом обработки исключений. Этот код, вероятно, никогда не увидит кто-либо еще, но это может быть так, поэтому я хотел бы знать, что я обрабатываю исключения, как и ожидалось.Когда обрабатывать исключение?
IEnumerable<Task> Tasks;
foreach(var task in Tasks)
{
try
{
//boiler plate prep for task (loading libraries, connecting, logging start, etc)
foreach(var step in task.Steps)
{
try
{
step.Execute();
}
catch(Exception ex)
{
LogStepError(step, ex);
throw;
}
}
//Notify parties task has been completed successfully, log task completion
}
catch(Exception ex)
{
LogTaskFailure(task);
}
finally
{
//close connections, etc
}
}
interface ITaskStep
{
void Execute()
{
}
}
Я также хотел бы добавить, что задачи шаги реализуют интерфейс ITaskStep, поэтому реализация Execute не мой собственный (ну это в данном случае, но кто-то может реализовать интерфейс). Мой код просто загружает библиотеку и запускает любые ITasks и их ITaskStep.
Подготовка плиты котла - это нечто другое, происходящее вне цикла, которое я хочу обернуть в try/catch. Он вытягивает некоторые зависимости от библиотеки и записывает их на диск для будущего использования, а также для подключения к удаленным системам и т. Д. – scottm
С помощью этого кода, если код плиты котла создает исключение, больше никаких задач не выполняется, и это не то, что я хочу. – scottm
Ну, мне также нужно использовать блок finally для обработки любых соединений. Думаю, мой первый пример был не самым представительным. – scottm