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

4

3 回答 3

2

超时异常怎么样?

于 2012-10-23T12:13:53.177 回答
2

我会考虑从代码中抛出InvalidOperationException 。正如 MSDN 所述,这个例外是:

当方法调用对于对象的当前状态无效时引发的异常。

因此,运行并等待进程的调用者或消费者将被通知函数执行失败function事实object

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

  • 或在详细信息中(如果足够的话)

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

于 2012-10-23T12:14:34.343 回答
2

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

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

但这取决于谁或什么将“阅读”您的异常。如果您的异常不是异常,那么也许您应该以不同的方式做事:-)

于 2012-10-23T12:16:54.480 回答