计划/队列服务的最佳实践?

时间:2012-10-16 10:10:44

标签: c# .net multithreading queue

我目前正在研究一个项目,这个项目基本上是一个网站,作为其主要功能,运行一个很长的计算任务(这个任务由1-10个子任务组成) - (需要大约30-40个平均完成的秒数)并将结果返回给用户,因为代码在站点本身使用多个线程(我不太喜欢这个想法),因此点击按钮后网站继续运行,而后台的这个线程继续计算。

我希望将此计算转移到单独的服务中,以停止与在Web应用程序中运行线程相关的问题。我的想法是,它应该是一个单独的服务,每隔X秒运行一次,看看数据库中是否有任何作业,如果有,运行它们,但我没有经验编写一个重复出现的Windows服务,并且想知道是否有人对此事有任何想法,这是开展此类任务的正确方法,是否有人有过做类似事情的经验,任何人都可以推荐我应该采取的任何特定方式吗?

2 个答案:

答案 0 :(得分:0)

我正在开展一个类似的项目。我正在考虑像你一样创建一个服务,但我没有看到我的情况带来的好处。我必须做一些长时间的计算,并把它放在缓存中。我不知道这是否是最佳实践,但我所做的是在global.asax上创建一个计时器,执行我的计算并将其放入缓存中。当请求到来时,我会给出最后一个缓存的值。

我希望这对你有所帮助。

答案 1 :(得分:0)

在这种情况下,我总是喜欢创建一个接受客户端请求的tcp监听器。如果我使用.net,我的第一选择是使用tcp或命名管道绑定的wcf服务。然后,当我收到请求时,我启动一个线程来继续请求。当长时间运行的进程最终结束时,我返回一个回调给客户端,这是一个在调度程序的第一个请求中指定的URL。恕我直言,这是最好的方法。

但是,您可能希望在经过验证的框架(如NServiceBus,RhinoBus等)上构建应用程序。您也可以在它们上面实现相同的业务。

相关问题