.Net MVC线程长时间运行的过程

时间:2011-08-22 21:42:15

标签: asp.net asp.net-mvc multithreading

我的MVC应用程序(C#)中有一个长时间运行的进程。 它为许多报告提供了建筑数据。

有些客户可能需要几分钟或更长时间来计算。在单独的线程中运行该进程是最佳选择吗? 是否有另一种方法允许进程运行,同时允许用户仍然使用网站的其余部分?

如果线程是最好的解决方案,那么任何好的网站或stackoverflow线程都要看看如何做到这一点?

2 个答案:

答案 0 :(得分:3)

当我遇到类似这样的情况时,我通常会构建一个服务来异步处理请求,并返回一个句柄,我可以用来检查它在数据库中的状态。恕我直言,把它作为网络应用程序中的一个线程拆分似乎你试图将一个方形钉插入一个圆孔。

答案 1 :(得分:1)

我用了两种方法来解决这个问题。如果工作保证不会长时间运行,我已经启动了一个线程来完成工作并立即返回给用户。当我们无法做出这种保证时,我们使用了一个队列(我们碰巧使用MSMQ)来执行长时间运行的任务。此处理是在除IIS之外的其他服务器上完成的。这样做的好处是我们建立了等待并重试失败机制。因此,除了处理长时间运行的任务之外,我们还将它用于任何可能以我们的MVC应用程序中不方便处理的方式失败的事情。这方面的主要例子是发送电子邮件。我不会在MVC应用程序中执行此操作,而只是在队列中抛出一个电子邮件任务。我们将命令模式用于放置在队列中的任务对象。一旦我们有了这个机制,我们就停止使用从MVC代码中生成线程的技术。