问题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#中有很多例外,它们从一个名称空间深深地继承到另一个名称空间。第二个问题,如何决定在特定情况下抛出什么异常?
答案 0 :(得分:2)
timeout例外怎么样?
答案 1 :(得分:2)
我会考虑从代码中抛出InvalidOperationException。 作为状态MSDN,这个例外是:
方法调用无效时抛出的异常 对象的当前状态。
因此,运行并等待该过程的function
的{{1}}或使用者的调用者将被通知执行功能失败。
如果您想详细说明失败原因的声明,可以表达
或详细信息(如果足够)
或创建自己从object
派生的自定义异常,并使用调用者外部可能需要的其他数据填充它。
答案 2 :(得分:2)
实际上,我会抛出一个TimeoutException,因为它描述了正在发生的事情
从理论上讲,如果快速谷歌/阅读文档没有引发已经描述正在发生的事情的异常,那么你可以扩展Exception以生成WeirdThingThatHappensSometimesInMyApplication异常。
但这取决于谁或什么将“读取”你的例外。如果您的例外不是例外,那么您可能应该采取不同的做法: - )