【发布时间】:2010-04-20 14:26:47
【问题描述】:
我有一个正在驱逐的线程.. 我想知道谁在杀死我的线程以及为什么。
我突然想到我的线程被操作系统杀死了,但我想确认一下,如果可能的话,我想知道它为什么会杀死它。
至于线程,我可以断言它在死亡前至少有 40 分钟的执行时间,但它在 5 分钟左右突然死亡。
public void RunWorker()
{
Thread worker = new Thread(delegate()
{
try
{
DoSomethingForALongLongTime();
}
catch(Exception e)
{
//Nothing is never logged :(
LogException(e);
throw e;
}
});
worker.IsBackground = true;
worker.SetApartmentState(System.Threading.ApartmentState.STA);
worker.Start();
}
编辑:解决答案
- 尝试/捕获可能的异常:
它已实现,但什么也没捕获:( - 主线程死亡:
该线程由 Web 服务器创建,并继续运行 - 工作完成:
工作没有完成,因为它最终影响到数据库,我可以在线程死亡时检查它是否完成。
想到这些,我想到了这个问题,谁在扼杀我的线程??
ps。不是戈登夫人拿着蜡烛在客厅里 :)
【问题讨论】:
-
线程被nixed时是否发生异常,如果是,它说明了什么?你确定线程不会简单地结束,这也可以解释它的消失。
-
这可能会成为 CSI 的精彩剧集。 ;)
-
如果是 ASP.NET 和/或 IIS,请添加这些标签
-
两个 cmets:* 你说“可能的”例外。也许您遗漏了一些东西,所以我建议您捕获异常(为了调试)。 * 在线程的正常退出点放置断点。看看能不能打。这两项措施肯定会排除两种可能的情况。
-
上校在拿着管子的公寓里惊慌失措。
标签: c# .net asp.net multithreading iis-5