【发布时间】:2015-01-18 13:53:05
【问题描述】:
我开发了一个主要使用 SMTP 发送电子邮件的应用程序。
MailMessage mail = new MailMessage();
mail.From = new MailAddress("from", "to");
mail.Subject = "subject";
mail.Body = "body";
SmtpClient client = new SmtpClient("my domain");
client.Credentials = new NetworkCredential(from, "MyPass");
client.Send(mail);
这很好,但现在我想同时发送多条消息而无需等待,所以我将所有消息放在一个列表中:
List<MailMessage> emails = new List<MailMessage>();
emails.Add(new MailMessage (...));
emails.Add(new MailMessage (...));
emails.Add(new MailMessage (...));
...
我想为每封电子邮件打开新的Thread:
// Generate and execute all mails concurrently
var emailTasks = emails.Select(msg =>
{
client = new SmtpClient();
return client.SendAsync(msg);
});
// Asynchronously wait for all of them to complete.
await Task.WhenAll(emailTasks);
得到了这个错误:
没有SendMailAsync,最后一行代码也报错: 'await' 运算符只能在异步方法中使用。考虑 用 'async' 修饰符标记这个方法并改变它的返回值 键入“任务”
【问题讨论】:
标签: c# .net multithreading smtp