6

Web サービス クライアント メソッドを呼び出すコードの小さなセクションがあります。

このメソッドは、出力パラメーターとしてメッセージの配列を返します。多くの場合、これらのメッセージには、発生したエラーの詳細が含まれています。エラーが発生すると、例外もスローされます。

例外がスローされたかどうか、または例外の種類に関係なく、メッセージをログに記録したいと考えています。finally ブロックにログインすることは許容される慣行ですか?

WebServiceClient client = GetWebServiceClient();
Console.WriteLine("Calling getUpdates...");
ItemStatus[] itemStatuses;
Message[] messages = null;
string outToken;
try
{
     outToken = client.getUpdates(inToken, out itemStatuses, out messages);
}
finally
{
     LogMessages(messages);
}
4

2 に答える 2

6

はい、finally ブロックは常に実行されます (例外がスローされなくても)。したがって、ロギングをこのコンテキストに配置するのはちょっと理にかなっています。

于 2013-07-02T08:51:57.687 に答える
2

Ifinallyブロックは、例外がスローされるかどうかに関係なく、常に実行されます。

これが完全なコードであれば問題ありません。そうでない場合は、例外がスローされたときに初期化されない可能性があるため、メッセージ変数をログに記録する前に null チェックを行うことをお勧めします。

このようなロギングは完全に公平だと思います。

編集:

最終的に実行を妨げるいくつかのコーナーケースがあることを忘れていました-それはあなたのケースではないと思いますが、言及する価値があります( 指摘してくれたサイモンに感謝します!)。

また、finallyメソッドが返された場合でもメソッドをログに記録する場合は、このアプローチが気に入っています。

于 2013-07-02T08:59:58.713 に答える