У меня есть контроллер WebApi, который одна из частей отправляет электронные письма множеству пользователей.WebApi Controller - Send Mail Async
[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 Async] (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), у них есть методы «Async», которые используют API REST. –
Я только что обновил оригинальный ответ, чтобы указать дополнительные сведения о том, что вы можете сделать, чтобы дать быстрый ответ вашему пользователю. – JotaBe