私は複数のステップでタスクにフィードできるアプリを書いています。私は以下のコードに似たコードをいくつか持っており、これが例外を処理する通常の方法かどうかを知りたいと思っています。このコードはおそらく他の誰にも見られませんが、それは可能性がありますので、誰もが期待するように例外を処理していることを知りたいと思います。例外を処理するのはいつですか?
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インタフェースを実装していることを追加したいので、実行の実装は(うまくそれがこの例である、誰かがインターフェイスを実装できる)私自身ではありません。私のコードはライブラリをロードし、ITasksとそのITaskStepを実行します。
ボイラープレートの準備は、ループの外側で起こっているいくつかの他のものですが、私はtry/catchでラップしたいものです。 – scottm
このコードでは、ボイラープレートコードが例外をスローすると、それ以上のタスクは実行されず、それは私が望むものではありません。 – scottm
まあ、私はまた、すべての接続を処理するためにfinallyブロックを使用する必要があります。私の最初の例は最も代表的ではなかったと思います。 – scottm