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

Dal*_*oft 5 asp.net-mvc mvcmailer

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

所以,我仍然需要使用像WebBackgrounder作为disussed 这里在我的MVC应用程序安全和真正的异步发送邮件?

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

Dal*_*oft 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发送电子邮件,但这样做的缺点是客户端而不是服务器操作.