0

質問1-実用的

を使用して、C#アプリケーションで子プロセスを実行しますSystem.Diagnostics.Process。次のように:

Process process = new Process();

// ... StartInfo initialization here

int timelimit_ms = 30000;
process.Start();
if (!process.WaitForExit(timelimit_ms))
{
  // What exception to throw here?
  throw new Excpetion(
    "An executing method exceeded the time limit of " + timelimit_ms.ToString() + "ms");
}

私は現在投げていSystem.ComponentModel.Win32Exceptionます。しかし、それが最良の選択かどうかはわかりません。子プロセスは単純なコマンドラインユーティリティです。では、最初の質問ですが、この状況でスローする例外は何ですか?

質問2-理論的

スローする例外について自問するのはこれが初めてではありません。そして、私は特定のものを選ぶ方法についての簡単なガイドラインを知りません。C#には非常に多くの例外があり、ある名前空間から別の名前空間に深く継承されています。2番目の質問、特定の状況でスローする例外を決定する方法は?

4

3 に答える 3

2

実際には、何が起こっているかを説明するためにTimeoutExceptionをスローします

理論的には、ドキュメントをすばやくグーグル/読んでも、何が起こっているかをすでに説明している例外がスローされない場合は、例外を拡張して、WeirdThingThatHappensSometimesInMyApplication 例外を生成できます。

ただし、例外を「読み取る」のは、誰または何が行われるかによって異なります。例外が例外的でない場合は、別の方法で行う必要があるかもしれません:-)

于 2012-10-23T12:16:54.480 に答える
2

タイムアウト例外はどうですか?

于 2012-10-23T12:13:53.177 に答える
2

コードからInvalidOperationExceptionをスローすることを考えます。MSDN が述べているように、この例外は次のとおりです。

メソッド呼び出しがオブジェクトの現在の状態に対して無効である場合にスローされる例外。

そのため、実行してプロセスを待機する の呼び出しfunctionまたはの消費者にはobject、関数の実行が失敗したという事実が通知されます。

失敗理由の宣言について詳しく知りたい場合は、それを表現できます

  • または詳細なメッセージで(それで十分な場合)

  • または、派生した独自のカスタム例外を作成InvalidOperationExceptionし、呼び出し元の外部で必要になる可能性のある追加データを入力します。

于 2012-10-23T12:14:34.343 に答える