在网页上启动新线程按钮单击

时间:2015-10-27 16:23:21

标签: c# asp.net multithreading

我继承了遗留应用程序,并且有一些代码可以简化为:

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()的结果/结果,页面也不打算等待它们。相反,它试图启动线程并假设它被解雇。

1 个答案:

答案 0 :(得分:2)

这是Web环境 - 每个请求都在自己的线程上下文中处理,而Thread.Start()没有用处:子线程将在处理请求后中止,父线程中止。

因此,如果您需要在Button_Click上运行某项工作,您应该托管WCF服务或Windows服务,或者能够接受来自Web应用程序的某些消息并在后台运行该作业。