首页 文章

Asp.net mvc异步处理任务

提问于
浏览
2

我正在研究asp.net mvc应用程序,它具有以下要求之一 .

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

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

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

我目前正在考虑以下atlernatives . 请建议

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

  • 用于接收消息并执行处理的WCF服务

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

谢谢,

Sveerap

1 回答

  • 0

    你可以简单地使用:

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

    Previous comments on this:

    有很多关于通过执行此操作使线程请求池匮乏的争论(这是真的),但是反驳的论点是你应该饿死池,因为服务器正忙于工作 . 理想情况下,您应该完全通过排队/分布式系统等将工作移到另一台服务器上,但这是一个复杂的解决方案 . 除非你需要处理数百个请求,否则你不需要考虑这个选项,因为它不太可能导致问题 . 这实际上取决于解决方案的可伸缩性要求,后台进程需要多长时间以及调用它的频率 .

相关问题