在MVC控制器我推出一个新的任务是这样的:主线程如何等待新线程启动?
Task.Run(() => <myFunction>)
就这么花的时间超过半小时的任务,所以我不想等待它:程序做了启动它后几件事情并将视图发送回浏览器。
但问题是,有时任务没有执行。我想这也许是因为主线程在第二个可以计划执行之前停止。这可能是真正的原因吗?
我该如何等待新任务开始执行,以便我可以将视图发送给客户端?
在MVC控制器我推出一个新的任务是这样的:主线程如何等待新线程启动?
Task.Run(() => <myFunction>)
就这么花的时间超过半小时的任务,所以我不想等待它:程序做了启动它后几件事情并将视图发送回浏览器。
但问题是,有时任务没有执行。我想这也许是因为主线程在第二个可以计划执行之前停止。这可能是真正的原因吗?
我该如何等待新任务开始执行,以便我可以将视图发送给客户端?
这是一个任务需要超过一个半小时,这里
2失误。那么,至少1。选择。
请勿误导任务系统。一般而言。
现在...
但问题是,有时不执行任务。我认为它可能是 ,因为主线程在第二个可以安排执行之前停止。这 是真正的原因
编号当运行返回,它返回并安排任务。当它开始运行留给任务调度程序 - 尽管这应该是快速的,除非在前面有一个大的队列等待。想要确定开始,可以编写自己的调度程序或使用线程。
什么是可能是整个asp.net进程停止,因为它不是长期运行任务的容器。如果你想安排一个重要的时间操作,那么使用asp.net之外的容器来运行你的任务 - windows服务,就是为了完成这个。正如Windows任务调度程序一样。哎呀,有了正确的权限,您可以将任务作为一个.exe文件并将其作为一个进程启动。不过,我会选择Windows服务。
ASP.NET可能随时决定回收运行网站的whol appdomain /应用程序池并重新启动它。例如,当一段时间没有处理请求(我认为标准设置为20分钟)。你的任务将会被停止。
我该怎么做才能等到新的任务开始其执行,
虽然没有带来任何问题,但因为它解决了错误的问题。计划任务开始 - 在有时间的时候。你刚刚创建了一个悬挂的asp.net工作线程,这是一个有限的资源,不能解决你认为存在的问题,因为分析不好。
在ASP.NET环境中,长时间运行的任务应该在某个外部容器中启动,例如Windows服务。将请求传递给Windows服务(通过Remoting或WCR),然后返回您的视图。 –
这就是我在某些情况下所做的:我调用Windows服务中托管的WCF函数,并按前面所述调用它(无需等待或等待)。有时候函数不会被执行,因为主线程在调度器启动新线程之前就停止了。 – Sean