在我的ASP.NET应用程序中,边倒栈我把下面的代码:该方法结束后,该线程会发生什么?
Public Shared Sub Larma(ByVal personId As Integer)
Dim thread As New System.Threading.Thread(New ParametrizedThreadStart(AddressOf Larma_Thread))
thread.Start(personId)
End Sub
Private Shared Sub Larma_Thread(ByVal personId As Integer)
StartaLarm(personId)
Thread.Sleep(1000 * 30)
StoppaLarm(personId)
End Sub
虽然这个线程运行时,该请求的其余部分被处理和响应被发送到客户端。但是,由于我从来不打电话thread.Abort()
或类似的东西,而且我对ASP.NET中的线程很不熟悉,所以我很担心我打开内存泄漏或其他线程问题。
线程会发生什么与我Larma_Thread
完成运行后上面的代码开始?
这也许可以解释为什么它不总是在我们的尖锐环境中工作。有什么办法可以告诉IIS这个线程在完成之前不应该被杀死吗? – 2010-06-16 06:40:22
没有。 IIS不知道ASP.NET进程中发生了什么,只要进程没有处理传入的请求,或者没有响应,IIS就认为它是公平的游戏,并且可以随时回收它。尽管如此,我应该检查.Net 4中是否有新的东西可以通过集成管道控制过程回收。 – 2010-06-16 07:15:17
不幸的是,我没有机会在这个项目上使用.NET 4(至少现在还没有),所以我需要在.NET 2.0(可能是3.5)中找到解决这个问题的方法。看到这个问题的后续行动:http://stackoverflow.com/questions/3052200/why-does-this-threading-approach-not-work – 2010-06-16 10:08:18