CODE: -与任务并行库发送邮件抛出错误
List<Task> tasks = new List<Task>();
foreach (var item in arr)//arr contains 1000+ mailids
{
tasks.Add(Task.Factory.StartNew(() =>
{
using (MailMessage msg = new MailMessage())
{
msg=getmsg();//p-shadow code no erorr here
SmtpClient smtp = new SmtpClient();
smtp.Host = smtpServer;
smtp.Port = smtpPort;
smtp.EnableSsl = isSmtpSsl != 0 ? true : false;
smtp.Credentials = new NetworkCredential(smtpUName,smtpPass);
smtp.Timeout = int.MaxValue;
smtp.Send(msg);//---throws error....
//sql code to insert db that mail is send
}
}, TaskCreationOptions.LongRunning));
}
Task.WaitAll(tasks.ToArray<Task>());
ERROR- “发送邮件失败。”
INTERNAL ERROR-“无法从传输连接读取数据:net_io_connectionclosed。”
难道你打开太多的连接到SMTP服务器,或者打它太快,它的节流吗?如果每秒钟执行一次或每五秒执行一次,会发生什么情况? – 2013-03-27 15:32:13
我不认为SmtpClient(或服务器)同时支持到同一台服务器的多个连接。想想你要做的事情:你要求多个'SmtpClient'对象连接到* same *服务器并发送电子邮件。 'SmtpClient'将重新使用连接到同一台服务器,所以你可能处于竞争状态。您是否尝试过使用'SendAsync'而不是使用'Task'? – 2013-03-27 15:56:33
至少,我希望你会想要使用一个'SmtpClient'对象 – 2013-03-27 15:57:26