私はこのように見えるいくつかのコードを持っています:
foreach(var obj in collection)
{
try
{
// WriteToFile returns the name of the written file
string filename = WriteToFile(obj);
SendFileToExternalAPI(filename);
}
catch ( ArbitraryType1Exception e )
{
LogError(e);
continue;
}
...
catch ( ArbitaryTypeNException e )
{
LogError(e);
continue;
}
finally
{
try
{
File.Delete(filename);
}
catch (Exception e)
{
LogError(e);
}
}
}
目的は、コレクション内の各オブジェクトの一時ファイルを書き出して、そのファイルをファイル名が必要な外部APIにロードし、完了したら一時ファイルをクリーンアップすることです。ファイルをディスクに書き込んだり、外部APIに読み込んだりするときにエラーが発生した場合は、エラーをログに記録して次のオブジェクトに移動します。ユーザーに何をすべきか尋ねることができません。
catchハンドラーにcontinueステートメントがある場合、finallyブロックのタイミングがどのように機能するかは少しわかりません。このコードは、tryブロックで例外がスローされたかどうかに関係なく、正しいファイルを削除しようとしていますか?または、catchステートメントのcontinueは、finallyブロックが実行される前に有効になりますか?