私はサーバーとのTCPソケット通信をカプセル化するクラスを持っています。サーバーに送信された各コマンド・メッセージについて、サーバーは常に応答コード(OK、Fail)を含む応答メッセージを戻します。私のクラスを使用すると、各コマンドはsyncまたはasyncのいずれかで実行できます。例外とソケットクライアントクラスの結果コード
基本的に2つのタイプの例外が発生する可能性があります。切断やその他の回復不可能なエラーによって引き起こされる「フォルト」、「送信バッファがいっぱいです」などの予期しない例外があります。障害が発生した場合、接続が再確立されるまでコマンドを続行したり、何かを試すことはできません。応答が失敗した場合や例外が発生した場合でも、コマンドを再試行することができます。
これで、今すぐsyncコマンドメソッドは、OK、Fail、Faultの値を持つ列挙型を返します。例外が発生した場合、それは単純に(syncコマンドの)呼び出し側のスレッドに呼び出されます。非同期コマンドの場合、Resultプロパティのenum値にはOK、Fail、FaultまたはExceptionの余分な値を含めることができ、コールバックはコマンドオブジェクトのExceptionプロパティを介して実際の例外オブジェクトにアクセスできます。
この戦略についてどう思いますか?私は同期コマンドのために例外を発生させず、例外を内部的に記録し、代わりに4番目の列挙型の値を返すように誘惑されています。なぜなら、結果コードをすべて作成し、すべてのケースで例外を発生させます。
ありがとうございました。
すべてのご回答ありがとうございます。私がこのスレッドから得た価値は、基本的に「例外的な条件に例外を使用する」ことを思い出させるものでした。だから私はそれを言った最初の人に答えを出しています。私が複数の答えを出すことができたら、私はそうするでしょう! –