【问题标题】:Does MvcMailer SendAsync block a ASP.NET MVC Request?MvcMailer SendAsync 是否会阻止 ASP.NET MVC 请求?
【发布时间】:2012-05-02 06:20:22
【问题描述】:

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

所以我仍然需要使用 WebBackgrounder 之类的东西(如讨论过的 here)在我的 MVC 应用程序中安全且真正异步发送邮件?

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

【问题讨论】:

  • 如果异步调用会阻塞请求线程会很奇怪..
  • 我专门讨论阻塞 ASP.NET 请求,如 stackoverflow.com/questions/6935427/...中所述。鉴于 MvcMailer 是一个 MVC 应用程序,我希望该项目能够解决这个问题。查看代码我会说它没有。

标签: asp.net-mvc mvcmailer


【解决方案1】:

下载 MvcMailer 并运行我自己的测试后,我可以确认 SendAsync 确实会阻止 ASP.NET 请求直到完成。

微软确认此行为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 发送电子邮件,但这样做的缺点是它是客户端而不是服务器操作。

【讨论】:

    猜你喜欢
    • 2011-10-19
    • 2011-10-25
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    相关资源
    最近更新 更多