MvcMailer SendAsync是否阻止ASP.NET MVC请求?

时间:2012-04-20 16:33:09

标签: asp.net-mvc mvcmailer

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

所以我仍然需要使用像WebBackgrounder这样的东西来讨论here,以便在我的MVC应用中发送安全且真正异步的邮件?

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

1 个答案:

答案 0 :(得分: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发送电子邮件,但这样做的缺点是客户端而不是服务器操作。