sco*_*ttm 3 c# exception-handling
我正在编写一个应用程序,我可以通过多个步骤提供任务.我有一些类似于下面的代码,我想知道这是否是处理异常的常规方法.这个代码可能永远不会被其他任何人看到,但它可能是,所以我想知道我正在按照任何人的预期处理异常.
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()
{
}
}
Run Code Online (Sandbox Code Playgroud)
我还想补充一点,任务步骤正在实现ITaskStep接口,因此Execute的实现不是我自己的(在这个例子中,有人可以实现接口).我的代码只是加载库并运行任何ITasks及其ITaskSteps.
继续捕获异常以记录它们的存在.但是如果你还没有真正解决导致抛出异常的问题,那么请重新抛出它以便调用者处理.不要吞下它.
上面的代码捕获a TaskIsBogusException和a PrinterOnFireException并以相同的方式处理它们:记录它并继续执行下一个任务.这样做是假的任务很好,因为你完成了任务,但是如果你抓住了一个PrinterOnFireException并且不重新抛出它,那么通过高兴,打印机最好还是不要着火.
如果您不打算重新抛出,那么只捕获代码知道如何处理的特定异常类型.让其他一切(你不知道如何处理的东西,或者你从未想过的东西)传播到下一个可用的异常处理程序.
| 归档时间: |
|
| 查看次数: |
365 次 |
| 最近记录: |