我继承了遗留应用程序,并且有一些代码可以简化为:
protected void SomeButton_Click(object sender, EventArgs e)
{
var otherThread = new System.Threading.Thread(delegate()
{
System.Threading.Thread.Sleep(20000);
FireAnAsyncProcess();
});
otherThread.Start();
thankYouPanel.Visible = true;
otherPanel.Visible = false;
}
FireAnAsyncProcess()
似乎间歇性地无法运行。这当然可以是一些事情,但我想知道:
如果上面有20000
暂停,即使处理了按钮点击,也会始终调用FireAnAsyncProcess()
吗?无论调用它的线程发生了什么,都会调用新线程吗?
编辑:网页上不需要FireAnAsyncProcess()
的结果/结果,页面也不打算等待它们。相反,它试图启动线程并假设它被解雇。
答案 0 :(得分:2)
这是Web环境 - 每个请求都在自己的线程上下文中处理,而Thread.Start()
没有用处:子线程将在处理请求后中止,父线程中止。
因此,如果您需要在Button_Click
上运行某项工作,您应该托管WCF服务或Windows服务,或者能够接受来自Web应用程序的某些消息并在后台运行该作业。