我有一个MVC控制器,通过Ajax帖子调用来发送电子邮件。我一直在尝试使用async / await模式,但我发现下面的代码会导致SendMailAsync(email)方法出现重大延迟。谁能解释为什么会出现这种情况呢?
(注意,我的UI项目的webconfig中设置了smtpClient)
[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);
}
}
答案 0 :(得分:2)
我在博客上解释async doesn't change the HTTP protocol。 ASP.NET请求中的await
“产生”到ASP.NET线程池,而不是“浏览器”。你可以return early或fire-and-forget但这些方法可能很危险,因为ASP.NET不是为它而设计的。