有没有人知道SmtpClientWrapper中的MvcMailer SendAsync方法是否会阻止ASP.NET MVC请求?看看MvcMailer维基和代码,我会说是的。
所以我仍然需要使用像WebBackgrounder这样的东西来讨论here,以便在我的MVC应用中发送安全且真正异步的邮件?
我正在寻找明确的答案谢谢。
答案 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发送电子邮件,但这样做的缺点是客户端而不是服务器操作。