【发布时间】:2015-06-04 20:28:07
【问题描述】:
我有一个 MVC 控制器,它通过 Ajax 帖子调用以发送电子邮件。我一直在尝试使用 async/await 模式,但发现下面的代码会导致 SendMailAsync(email) 方法出现明显延迟。谁能解释为什么会这样?
(注意,smtpClient 是在我的 UI 项目的 webconfig 中设置的)
[HttpPost]
public async Task TestMethod()
{
Workflow.Mailer rm = new Workflow.Mailer();
await rm.TestEmailBasic();
}
public async Task TestEmailBasic()
{
var email = new MailMessage("website@test.me", "sadsad@test.com", "Testing basic email", "Hello world");
await SendEmailAsync(email);
}
public async Task SendEmailAsync(MailMessage email)
{
using (var smtpClient = new SmtpClient())
{
email.Subject = "Async test";
await smtpClient.SendMailAsync(email);
}
}
【问题讨论】:
-
慢一点,我们到底在谈论多少时间?你期望什么,它的表现如何?
-
与不使用异步相比如何?可能只是您的邮件服务器需要一段时间来处理来自您的 web 应用程序的消息,以试图减少垃圾邮件。
-
大约需要 5 秒。没有异步也需要类似的时间,所以你可能是对的。当我使用 Ajax 调用该方法并捕获 Success 回调时,我会认为这会在任务完成之前返回吗?目前它并没有这种行为方式,因此它使 UI 感觉没有响应。有什么办法可以改善吗?
标签: c# asp.net-mvc async-await