3
这里有一个简单的程序:多线程异常处理
class Program
{
static Calc calc = new Calc();
static void Main(string[] args)
{
try
{
var t1 = new Thread(calc.Divide);
t1.Start();
}
catch (DivideByZeroException e)
{
//Console.WriteLine("Error thread: " + e.Message);
}
try
{
calc.Divide();
}
catch (Exception e)
{
//Console.WriteLine("Error calc: " + e.Message);
}
}
class Calc
{
public int Num1;
public int Num2;
Random random = new Random();
public void Divide()
{
for (int i = 0; i < 100000; i++)
{
Num1 = random.Next(1, 10);
Num2 = random.Next(1, 10);
try
{
int result = Num1/Num2;
}
catch (Exception ex)
{
throw ex;
}
Num1 = 0;
Num2 = 0;
}
}
}
}
两个线程都在同一时间执行相同的方法。其中一个将Num1设置为0,而另一个设法将Num1(0)同时分割。问题是为什么抛出异常,为什么它不被Main方法中的try catch块捕获?
异常不泡从一个线程的线程开始之前加入这行。甚至可能没有保证启动抛出异常的那个原始线程已经存在了。 – vcsjones
另外,请注意,IDE有时(取决于设置)在发生异常时即使发生异常也会停止(而不是在此情况下会被第一个“catch”捕获)。 –
'throw ex;'总是[坏模式](http://stackoverflow.com/a/4553119/60761)。 –