在application_start期间的ASP.NET MVC应用程序中,新线程获取startet。线程将数据加载到Cache中需要5分钟。应用程序需要知道加载正在进行中。这就是为什么我想在应用程序变量中设置一个标志。
当我启动线程时,我将Application [“LoadingCacheActive”]设置为true。 当线程完成时,我找不到将此变量设置为false的方法。我不想使用thread.Join,因为application_start必须立即完成。在创建的线程内部,我无法设置变量,因为HttpContext.Current不可用。
有什么建议吗?
答案 0 :(得分:3)
您可以在Application类中使用静态AutoResetEvent / ManualResetEvent数据成员。创建最初未设置的事件。当应用程序需要检查线程是否完成时,它可以调用WaitOne(0)来测试事件的状态。线程完成后,可以设置事件。如果您使用的是ManualResetEvent,则需要在启动新线程之前重置它。
但是,您也可以使用Thread.ThreadState作为MSDN声明:
线程状态只有兴趣 调试方案。你的代码应该 永远不要使用线程状态进行同步 线程的活动。
答案 1 :(得分:0)
我必须做类似的事情。最简单的方法是清除线程中最后一行的标志。
编辑:Franci Penov是对的,您的线程可能会因应用程序池关闭而被杀死。但是在这种情况下不应该伤害你。