抛出什么例外来表明子进程被冻结了

时间:2012-10-23 12:08:47

标签: c# exception freeze child-process

问题1 - 实用

我使用System.Diagnostics.Process在我的C#应用​​程序中运行子进程。如下所示:

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#中有很多例外,它们从一个名称空间深深地继承到另一个名称空间。第二个问题,如何决定在特定情况下抛出什么异常?

3 个答案:

答案 0 :(得分:2)

timeout例外怎么样?

答案 1 :(得分:2)

我会考虑从代码中抛出InvalidOperationException。 作为状态MSDN,这个例外是:

  

方法调用无效时抛出的异常   对象的当前状态。

因此,运行并等待该过程的function的{​​{1}}或使用者调用者将被通知执行功能失败。

如果您想详细说明失败原因的声明,可以表达

  • 或详细信息(如果足够)

  • 或创建自己从object派生的自定义异常,并使用调用者外部可能需要的其他数据填充它。

答案 2 :(得分:2)

实际上,我会抛出一个TimeoutException,因为它描述了正在发生的事情

从理论上讲,如果快速谷歌/阅读文档没有引发已经描述正在发生的事情的异常,那么你可以扩展Exception以生成WeirdThingThatHappensSometimesInMyApplication异常。

但这取决于谁或什么将“读取”你的例外。如果您的例外不是例外,那么您可能应该采取不同的做法: - )