2010-06-15 34 views
0

在我的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完成运行后上面的代码开始?

回答

1

线程代码执行完成后,线程将停止并且其资源被回收。

1

一旦你的工作完成,线程将被终止。

请注意,线程也可能会在您的工作完成之前终止我会IIS决定它需要回收ASP.NET工作线程。

+0

这也许可以解释为什么它不总是在我们的尖锐环境中工作。有什么办法可以告诉IIS这个线程在完成之前不应该被杀死吗? – 2010-06-16 06:40:22

+0

没有。 IIS不知道ASP.NET进程中发生了什么,只要进程没有处理传入的请求,或者没有响应,IIS就认为它是公平的游戏,并且可以随时回收它。尽管如此,我应该检查.Net 4中是否有新的东西可以通过集成管道控制过程回收。 – 2010-06-16 07:15:17

+0

不幸的是,我没有机会在这个项目上使用.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

相关问题