我有一個WebApi控制器,其中一個部分發送電子郵件給一組用戶。WebApi控制器 - 發送郵件異步
[HttpPost]
[Authorize]
[Route("{id}/Do")]
public async Task<HttpResponseMessage> Post(int id, Model model)
...
await _emailService.SendAsync(message);
...
現在,發送電子郵件(SendGrid)
public override async Task SendAsync(MailMessage message)
{
var client =
new SmtpClient(SendGridServerName, SendGridServerPort)
{
Port = SendGridServerPort,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false
};
var credentials = new NetworkCredential(SendGridUserName, SendGridPassword);
client.EnableSsl = true;
client.Credentials = credentials;
message.From = new MailAddress(FromAddress);
await client.SendMailAsync(message);
}
一切正常,但它是非常慢的方法。我期待它快,但await _emailService.SendAsync(message);
似乎不是異步。它在那裏停留了一段時間。
任何想法?
感謝
看看[WebApi異步](http://stackoverflow.com/questions/22814134/multiple-await-async-in-net-webapi)。 「單個請求可能會稍微慢一點」,但是當系統處於負載下時,它會表現得更好。乾淨利落。假設電子郵件客戶端是SmtpServer,你最好用[新線程](http://forums.asp.net/t/1731495.aspx?SmtpClient+SendAsync+doesn+t+do+anything),所以你的行動不是等待這個完成。 – lloyd
我建議使用[SendGrid SDK](https://github.com/sendgrid/sendgrid-csharp)來代替,它們具有使用REST API的'Async'方法。 –
我剛剛更新了原始答案,指出了一些額外的細節,說明您可以如何快速回答用戶。 – JotaBe