Это определенно одна из тех смущающих параллельных задач , которые извлекут большую выгоду из параллелизма.
В .NET 4.0 этот код можно запускать параллельно, просто используя метод Parallel.ForEach .
Предполагая, что messages
- это последовательность объектов, содержащих Receiver
, Subject
и Body
отправляемых электронных писем, в этом примере для автоматической отправки используется параллельная библиотека задач как можно больше из них параллельно, учитывая ресурсы, доступные на машине:
Parallel.ForEach(messages, message =>
{
MailMessage mailObj = new MailMessage();
mailObj.Bcc.Add(message.Receiver);
mailObj.ReplyToList.Add("our-reply-email@oursite.com");
mailObj.SubjectEncoding = System.Text.Encoding.UTF8;
mailObj.BodyEncoding = System.Text.Encoding.UTF8;
mailObj.Subject = message.Subject;
mailObj.Body += Environment.NewLine;
mailObj.Body = message.Body;
mailObj.Body += Environment.NewLine;
SmtpClient SMTPServer = new SmtpClient();
SMTPServer.Send(mailObj);
}
Конечно, вы можете реализовать то же решение и в .NET 2.0, например, с помощью метода ThreadPool.QueueUserWorkItem , чтобы вручную планировать отправку электронных писем по разным потокам, но это определенно потребует больше усилий.