检查线程是否仍在运行

时间:2009-02-11 23:51:47

标签: asp.net multithreading caching

在application_start期间的ASP.NET MVC应用程序中,新线程获取startet。线程将数据加载到Cache中需要5分钟。应用程序需要知道加载正在进行中。这就是为什么我想在应用程序变量中设置一个标志。

当我启动线程时,我将Application [“LoadingCacheActive”]设置为true。 当线程完成时,我找不到将此变量设置为false的方法。我不想使用thread.Join,因为application_start必须立即完成。在创建的线程内部,我无法设置变量,因为HttpContext.Current不可用。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您可以在Application类中使用静态AutoResetEvent / ManualResetEvent数据成员。创建最初未设置的事件。当应用程序需要检查线程是否完成时,它可以调用WaitOne(0)来测试事件的状态。线程完成后,可以设置事件。如果您使用的是ManualResetEvent,则需要在启动新线程之前重置它。

但是,您也可以使用Thread.ThreadState作为MSDN声明:

  

线程状态只有兴趣   调试方案。你的代码应该   永远不要使用线程状态进行同步   线程的活动。

答案 1 :(得分:0)

我必须做类似的事情。最简单的方法是清除线程中最后一行的标志。

编辑:Franci Penov是对的,您的线程可能会因应用程序池关闭而被杀死。但是在这种情况下不应该伤害你。