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

时间:2014-09-03 05:08:35

标签: .net console-application

我的ASP.NET Web应用程序提供了一个基本上接受excel电子表格的导入功能。然后需要对电子表格进行处理,解析,验证等。这可能需要很长时间,具体取决于电子表格的大小。 我没有在Web应用程序上执行此操作,而是决定编写一个控制台应用程序,负责处理长时间运行的任务。

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

控制台应用程序需要始终处于待机模式,通过反复检查" job_queue"准备好接收新作业。表

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

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

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

如何改进此代码以使其更加资源友好且更强大?

提前致谢

2 个答案:

答案 0 :(得分:1)

可能最简单的方法是设置一个Windows计划任务,该计划任务按计划执行您的控制台应用程序。您可以从控制台中删除while循环,只需依赖Windows即可根据需要随时运行控制台应用程序。

Windows计划任务也可以配置为在失败或无响应的情况下自动重启。

答案 1 :(得分:0)

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

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

另一种选择 - 如果您的流程更复杂(例如:您希望能够从文件中间继续读取,您希望在特定时间内处理特定文件),则可以使用WWF:

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

HTH