使用async和await发送SendMailAsync非常慢

时间:2015-06-04 09:00:28

标签: c# asp.net-mvc async-await

我有一个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);
        }
    }

1 个答案:

答案 0 :(得分:2)

我在博客上解释async doesn't change the HTTP protocol。 ASP.NET请求中的await“产生”到ASP.NET线程池,而不是“浏览器”。你可以return earlyfire-and-forget但这些方法可能很危险,因为ASP.NET不是为它而设计的。