在MVC控制器中,我发起了一个像这样的新任务:
Task.Run(() => <myFunction>)
这是一项耗时超过半小时的任务,所以我不想等待它:启动它后,程序会执行一些操作并将视图发送回浏览器。
但问题是有时候任务没有执行。我想也许是因为主线程在第二个可以被安排执行之前就停止了。这可能是真正的原因吗?
如何等待新任务开始执行,以便我可以将视图发送给客户端?
答案 0 :(得分:0)
这项任务需要半个多小时,
这里有2个错误。嗯,至少1。选择。
不要误导任务系统。总的来说。
现在...
但问题是有时候任务没有被执行。我想也许就是这样 因为主线程在第二个可以被安排执行之前停止。可以吗 是真正的原因
没有。 WHen Run返回,它返回并安排任务。当它开始运行时会留给任务调度程序 - 尽管除非前面有一个大队列,否则它应该很快。想要一个确定的开始,要么编写自己的调度程序,要么使用线程。
整个asp.net进程可能会停止,因为它不是长时间运行任务的容器。如果你想安排一个重要的时间操作,那么使用asp.net之外的容器来运行你的任务 - 窗口服务就是这样做的。和Windows任务调度程序一样。哎呀,拥有正确的权限,您可以将任务作为一个.exe并将其作为一个进程启动。不过,我会选择使用Windows服务。
ASP.NET可能随时决定回收运行网站的whols appdomain / application pool并重新启动它。例如,当一段时间内没有处理任何请求时(我认为标准设置为20分钟)。然后你的任务就会停止。
如何等待新任务开始执行,
不带任何东西,因为它正在解决错误的问题。计划任务开始 - 有时间的某个时刻。你刚刚创建了一个挂起的asp.net工作线程,这是一个有限的资源,因为分析不好而无法解决你认为存在的问题。