Asp.net mvc异步处理任务

时间:2011-09-07 10:56:41

标签: asp.net-mvc asynchronous

我正在开发具有以下要求之一的asp.net mvc应用程序。

场景:用户提交处理长时间运行任务的请求。该任务必须在服务器端启动。在不等待任务完成的情况下,必须向用户发送响应,说明一旦任务完成,他们将收到电子邮件通知。

这似乎是异步处理的一种情况。最初我想过使用异步委托,但后来才知道异步委托将作为后台线程运行,并且如果主线程退出则不会保持活动状态。对我来说似乎,一旦响应被发送给用户,主线程就会退出,所以作为背景线程。如果我错了,请纠正我。

所以我想到了使用Thread类创建一个前台线程。但是在我读过的一篇文章中,提到asp.net不会看它是否是一个前台线程而且不会有用。这是真的吗?

我目前正在关注以下的atlernatives。请建议

  1. 移出asp.net外部的任务处理逻辑并放入控制台app / service 并通过从asp.net推送消息到MSMQ来通知应用程序。收到消息后,控制台应用程序将执行处理并发送电子邮件通知

  2. 接收邮件并进行处理的WCF服务

  3. 任何其他更好的想法请分享

    谢谢,

    Sveerap

1 个答案:

答案 0 :(得分:0)

你可以简单地使用:

ThreadPool.QueueUserWorkItem(o =>
                                    {
                                        // do something aync
                                    });

Previous comments on this:

  

有许多关于使线程请求池匮乏的争论   这样做(这是真的),但你应该反驳论证   因为服务器忙着做工作而使游泳池挨饿。当然   理想情况下,您应该完全通过将工作移到另一台服务器上   排队/分布式系统等,但这是一个复杂的解决方案。除非   你需要处理数百个你不需要考虑的请求   这个选项,因为它不太可能导致问题。它真的   取决于您的解决方案的可扩展性要求,需要多长时间   后台流程将采取,以及它被调用的频率。