使用线程时,您可以在控制器中使用回调函数吗?

时间:2018-04-02 18:55:13

标签: c# asp.net asp.net-mvc multithreading

在ASP.NET MVC中,我有一个控制器动作,它调用一个线程中的函数(DoWork)。该函数使用也在控制器中的回调函数(CallBackFunction)。我的问题:由于DoWork是在一个线程中调用的,所以当管理器对象调用它时,回调函数(CallBackFunction)是否仍然存在?如果是的话,你能解释一下为什么吗?在我看来,由于DoWork在一个线程中被调用,控制器实例可能不再存在,因为没有函数在运行,DoWork在一个单独的线程中......我错了吗?是否有可能被垃圾收集或销毁? Controller类的生命周期是什么?

public ActionResult ControllerAction()
{
    //Starts a new thread
    new Thread(DoWork).Start();
}

public void DoWork()
{
    BusinessLayer.Manager manager = new BusinessLayer.Manager(); 

    // Will CallBackFunction always be available, even if DoWork is called in a thread? 
    manager.OnStepDone += CallBackFunction;
    manager.DoLongRunningActionWithManySteps();
}

public void CallBackFunction(string stepInfo)
{
      //do something with stepInfo....
}

1 个答案:

答案 0 :(得分:0)

为了让您的线程完成其工作并完成,创建控制器实例将需要等待线程完成。这意味着您可能会持有HTTP响应人质,直到该工作完成。看看这个:How to use threads in asp.net?