.NET控制台应用程序与Web应用程序一起处理长时间运行的任务

问题描述:

我的ASP.NET Web应用程序提供基本上接受Excel电子表格的导入功能。电子表格然后需要被处理,解析,验证等。这可能需要相当长的时间,这取决于电子表格的大小。 我决定编写一个控制台应用程序,负责处理长时间运行的任务,而不是在Web应用程序上这样做。.NET控制台应用程序与Web应用程序一起处理长时间运行的任务

该体系结构非常简单,每当启动导入时Web应用程序都会写入一个名为“job_queue”的表,其中包含导入所需的所有信息。控制台应用程序然后从队列中拾取未完成的作业,处理它们,并将它们标记为完整,以便它们不会再被拾取。

控制台应用程序需要始终处于待机模式,随时可以通过反复检查“job_queue”表获取新作业。

我的问题是什么是控制台应用程序的最佳解决方案?

目前我有这样的东西,永远运行。但是,它似乎非常耗费资源,有时会挂起并需要重新启动控制台应用程序。

public static void Main(string[] args) 
{ 
    while (true) // Keep repeating the same thing 
    { 
     ProcessJobs(); 
    } 
} 

我该如何改进此代码,以便它可以更加资源友好和更强大?

在此先感谢

也许最简单的事情做的是建立一个Windows计划任务计划的基础上执行控制台应用程序。您可以从控制台中删除while循环,只需依赖Windows即可根据需要经常运行控制台应用程序。

还可以将Windows计划任务配置为在发生故障或无响应时自动重新启动。

+0

最后我采取这一做法。我设置了计划任务,每5分钟运行一次控制台应用程序,然后退出(而不是无限循环)。这可以避免每次启动新进程后挂起进程的问题。唯一的缺点是最大等待时间为5分钟,以便由控制台应用程序处理新的后台作业。 – 2014-12-09 04:21:59

我认为使用计划任务并不是最好的解决方案,因为您在查询数据库之前一直在查询下一个文件。效率不高。 相反,您可以使用FileSystemWatcher在磁盘上创建新文件时接收通知,然后处理该文件。

http://devproconnections.com/net-framework/how-build-folder-watcher-service-c

另一种选择 - 如果你的过程是比较复杂(例如:你希望能够继续从文件中读取,要处理在特定时间ETS特定的文件),你可以使用WWF:

http://msdn.microsoft.com/en-us/library/vstudio/ms734631%28v=vs.90%29.aspx

HTH

+0

电子表格文件存储在不在文件系统中的数据库中。 – 2014-12-18 04:13:29