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



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

所以我仍然需要使用像 WebBackgrounder 这样的东西,在我的 MVC 应用程序中进行安全且真正异步的邮件发送?

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

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

最新更新