Asp.net 检查线程是否仍在运行

Asp.net 检查线程是否仍在运行,asp.net,multithreading,caching,Asp.net,Multithreading,Caching,在ASP.NET MVC应用程序中,在应用程序启动期间,一个新线程将启动。线程将数据加载到缓存中,需要5分钟。应用程序需要知道加载正在进行中。这就是我想在应用程序变量中设置标志的原因 启动线程时,我将应用程序[“LoadingCacheActive”]设置为true。 当线程完成时,我没有找到一种方法将这个变量设置为false。我不想使用thread.Join,因为应用程序的启动必须立即完成。在创建的线程中,我无法设置变量的大小,因为HttpContext.Current不可用 有什么建议吗?我

在ASP.NET MVC应用程序中,在应用程序启动期间,一个新线程将启动。线程将数据加载到缓存中,需要5分钟。应用程序需要知道加载正在进行中。这就是我想在应用程序变量中设置标志的原因

启动线程时,我将应用程序[“LoadingCacheActive”]设置为true。 当线程完成时,我没有找到一种方法将这个变量设置为false。我不想使用thread.Join,因为应用程序的启动必须立即完成。在创建的线程中,我无法设置变量的大小,因为HttpContext.Current不可用


有什么建议吗?

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

编辑:Franci Penov是对的,应用程序池关闭可能会导致线程死亡。但是在这种情况下,这不会对您造成伤害。

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

但是,您也可以按照MSDN的说明使用:

线程状态只与 调试场景。你的代码应该 永远不要使用线程状态进行同步 线程的活动


您知道,IIS可能会决定在任何时间点回收您的进程,如果没有未完成的请求,从而在处理过程中杀死线程,对吗?编辑:如果线程不能设置标志,则将标志移动到它可以的位置。如果您正在加载缓存,那么缓存必须对用户可见,因此请将标志放在它旁边。