在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....
}
答案 0 :(得分:0)
为了让您的线程完成其工作并完成,创建控制器实例将需要等待线程完成。这意味着您可能会持有HTTP响应人质,直到该工作完成。看看这个:How to use threads in asp.net?