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

因此,对于在我的MVC应用程序中发送安全且真正异步的邮件,我仍然需要使用废弃的here之类的WebBackgrounder之类的东西吗?

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

最佳答案

下载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发送电子邮件,但这具有作为客户端而不是服务器操作的缺点。

08-25 15:07