我有一个相当长时间运行的过程(几分钟),我需要每个月大致运行一次 - 但不是按固定的时间表,而是在用户单击ASP.NET中的 Go 之后Webforms GUI页面。
由于ASP.NET实际上并不是为处理长时间运行的后台任务而设计的,我的想法是把它放到一个单独的控制台应用程序中。但是如何根据需要启动呢?
如果我在ASP.NET页面的代码隐藏中使用Process.Start(....)
会怎样?我想避免阻止整个Web UI大约20分钟......而且:即使它没有阻止我的UI,如果ASP.NET应用程序池在循环时循环,我的长时间运行任务会发生什么它还在运行吗?
另一个想法是让一个频繁运行的作业(每2分钟运行一次)检查某种标志(例如存在一些数据库条目),如果需要,该作业将启动长时间运行的任务。 / p>
但是同样的问题:如果我使用Process.Start()
从作业启动我的20分钟任务 - 是否会阻止来电者?
每天五次安排长时间运行的任务似乎有点过分,因为它通常每月只运行一次 - 但与此同时,用户希望在合理的时间内完成他的结果(在安排过程后不到1小时,如果有可能的话 - 所以我真的不能只安排它在晚上运行一次......
答案 0 :(得分:7)
答案 1 :(得分:3)
首先关闭 - 有几个原因 - ASP.NET对于长期运行的任务/作业/ ......无论如何都是
。我有很多次这个要求,总是像以下一样解决/分开:
<强>工人强>
带
网站强>
只需调用worker的一些webservice-methods来排队/查询/暂停/停止/ ...作业。对于查询作业,可以选择调用统一的作业存储(例如db)
虽然对你来说可能有点过分了......但这是我在这种情况下的瑞士军刀。
答案 2 :(得分:0)
像执行操作一样使用标准的内置Windows Task Scheduler,但是从Web应用程序中调用它。
在“任务计划程序”中配置任务。它不需要预定的触发器。在您的Web应用程序中,只需使用Process.Start
即可将其启动:
SchTasks.exe /Run /TN Folder\Taskname
我没有直接使用SchTasks.exe
,而是使用了Microsoft.Win32.TaskScheduler包装器类。