有谁知道 SmtpClientWrapper 中的 MvcMailer SendAsync 方法是否会阻止 ASP.NET MVC 请求?查看 MvcMailer wiki 和代码,我会说是的。
因此,我仍然需要使用此处讨论的 WebBackgrounder 之类的东西来在我的 MVC 应用程序中发送安全且真正异步的邮件?
我正在寻找一个明确的答案谢谢。
有谁知道 SmtpClientWrapper 中的 MvcMailer SendAsync 方法是否会阻止 ASP.NET MVC 请求?查看 MvcMailer wiki 和代码,我会说是的。
因此,我仍然需要使用此处讨论的 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 来发送电子邮件,但这具有作为客户端而不是服务器操作的缺点。