2011-06-30 8 views
2

編集:これは以前の質問とは関係ありません。もう一つのテーマです。無制限サービスで例外を処理する

私は、30秒ごとに実行されるアプリケーションを作成しています。これは、データベースで不便な作業を行うためです。監督やユーザー/管理の対話は絶対に必要ありません。ただし、特定のパラメータをアプリケーションの起動時にアクセス可能にするためには、App.configファイルで正しく定義する必要があります。さらに、最終的に発生する可能性があるすべての例外はログに記録する必要がありますが、プログラムは30秒後に実行されるためにうまく終了できません...この間隔で実行する必要があるのは、データベースがアクセス可能であり、すべてのパラメータが正しい。つまり、メソッド内の例外処理を一切行わずに、メソッドDoWork()の全体的な動作をコード化して、Main()メソッドに入れてもよいですか?

try 
{ 
    DoWork(); 
} 
catch (Exception ThisException) 
{ 
    /* Log exception. */ 
} 

答えて

1

ほとんどの例でOKです。上記のデータベース接続の終了や使用済みリソースのクリーンアップは、スキップするものではありません。開いているファイルハンドルを保持することは悪い可能性があり、新しい実行をブロックします。

さらに、いくつかの致命的な例外(OutOfMemory、RunTimeExceptionなど)がログに記録されるか、何らかのアラートを生成する必要があります。

1

これは、DoWork()の機能によって異なります。

ファイルやデータベース接続を開いたり閉じたりしている場合は、これらのリソースを安全に処分するためには、特定のエラー処理が必要です。

「キャッチオール」をキャッチしようとしても、それに似ていることは間違いありません。

+0

は、これらの例外の場合のクリーンアップリソースをすべきで、文を「使用」を使用してみてください。 –

0

エラー処理が具体的である必要があります。設定が間違っていると思われる場合は、例外をスローするのではなく、その設定をチェックしてください。例外をスローする必要がある場合は、try ... catchを具体的に記述します。設定が間違っている場合、何をしたいですか?サービスをシャットダウンしますか?デフォルトの設定を使用しますか?

キャッチを持つことはすべて、のいずれかの例外がスローされ、CLRによってキャッチされると危険になります。そのブロックにキャッチされます。あなたが例外をキャッチした場合、考え方は何らかの方法で処理することです。その例外がメモリ不足例外の場合はどうなりますか?ファイルIO?またはDB?私が言っている何

バックアップするために、いくつかのMSDNの記事:

http://msdn.microsoft.com/en-us/library/xtd0s8kd.aspx

http://msdn.microsoft.com/en-us/library/seyhszts.aspx

+0

私は特に、これはいつも実行されると言いました。あなたが言及した2つの例外は問題ではありません。 – User

+0

あなたのコード効果の頻度はどのように例外がスローですか?私はあなたの例外処理が一般的ではなく特定のものでなければならないことを示そうとしていました。 – Jay