Question 1 – practical
I run child process in my C# application using System.Diagnostics.Process. Like the following:
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");
}
I’m currently throwing System.ComponentModel.Win32Exception. But I don’t sure it is the best choice. The child process is a simple command line utility. So the first question, what exception to throw in this situation?
Question 2 – thoretical
This is not the first time I ask myself about what exception to throw. And I don’t know of a simple guidelines on how to pick a certain one. There are so much exceptions in C#, deeply inherited from one namespace to another. The second question, how to decide what exception to throw in a specific situation?
Practically, I’d throw a TimeoutException as it describes what is happening
Theoretically, if a quick google / read of the docs doesn’t throw up an exception that already describes what is happening then you can just extend Exception to generate a WeirdThingThatHappensSometimesInMyApplication Exception.
But it depends who or what is going to “read” your exception. If your exception isn’t exceptional then maybe you should do things differently 🙂