5

有谁知道 SmtpClientWrapper 中的 MvcMailer SendAsync 方法是否会阻止 ASP.NET MVC 请求?查看 MvcMailer wiki 和代码,我会说是的。

因此,我仍然需要使用此处讨论的 WebBackgrounder 之类的东西来在我的 MVC 应用程序中发送安全且真正异步的邮件?

我正在寻找一个明确的答案谢谢。

4

1 回答 1

5

下载 MvcMailer 并运行我自己的测试后,我可以确认 SendAsync 确实会阻止 ASP.NET 请求直到完成。

Microsoft 确认此行为https://connect.microsoft.com/VisualStudio/feedback/details/688210/smtpclient-sendasync-blocking-my-asp-net-mvc-request

“SendAsync() 调用 SynchronizationContext.OperationStarted(),这是在异步操作完成之前不释放 HttpContext 实例(甚至不处理请求)的提示。”

由于 MvcMailer 只是将来自 System.Net.Mail 的 SendAsync 包装起来,因此它受到相同的限制。

异步发送电子邮件的正确方法是使用 WebBackgrounder 之类的东西,因为它完全是后台操作(因此使用 SendAsync 或 Send 无关紧要)。

为简单起见,您还可以使用 Ajax 来发送电子邮件,但这具有作为客户端而不是服务器操作的缺点。

于 2012-04-21T10:16:43.067 回答