我有一个线程池,我使用一个库,如果满足某些条件则抛出异常。我的问题是,如果这个用完IDE,线程会停止还是整个程序都会停止?
答案 0 :(得分:3)
如果应用程序是.Net 2+,非主线程上的未处理异常将使该过程变平。
您可以使用app.config LegacyUnhandledExceptionPolicy
设置配置此行为,但我不建议这样做,因为它可能会掩盖严重的错误。
<强>更新强>
如果您希望忽略偶尔的超时异常,请考虑将您的WebService调用放在try \ catch块中并忽略超时异常:
try
{
//Call WebService
}
catch(System.Net.WebException ex)
{
//Ignore
}
答案 1 :(得分:3)
让我们回顾一下你的所作所为:
TheadPool
主题上执行的方法。try-catch
阻止不会处理异常。现在我们可以使用以下代码轻松测试它。请仔细注意下面的观察结果,尤其是粗体观察结果,因为它们在您的问题中很有意思。
public static void Main()
{
ThreadPool.QueueUserWorkItem(
(state) =>
{
throw new InvalidOperationException();
}, null);
while (true)
{
Thread.Sleep(1000);
Console.WriteLine(DateTime.Now.ToString());
}
}
在IDE外部运行时,您将看到以下内容。
在IDE 1 内部运行时,您将看到以下内容。
1 我使用Visual Studio 2010进行了测试。
答案 2 :(得分:1)
当调试器中断程序时,所有线程都会停止。
在Debug -> Windows -> Threads
屏幕中,您可以看到线程。您可以“冻结”一个线程,这意味着如果您继续运行该程序,它将保持暂停状态。
因此,即使调试器运行,也可以使某些线程停止运行。相反的情况是不可能的:当调试器处于中断模式时,没有线程可以运行。