【发布时间】:2012-03-29 08:01:26
【问题描述】:
我们目前正在使用 ThreadPool 异步向用户发送电子邮件。本质上,我们有这样的逻辑:
for (int i=0 < i < numUsers; i++)
{
//Pre email processing unrelated to sending email
string subject = GetSubject();
string message = GetMessage();
string emailAddress = GetEmailAddress();
EmailObj emailObj = new EmailObj { subject = subject, message = message, emailAddress = emailAddress };
bool sent = ThreadPool.QueueUserWorkItem(new WaitCallback(SendEmail), emailObj);
//Post email processing unrelated to sending email
}
public void SendEmail(object emailObj)
{
//Create SMTP client object
SmtpClient client = new SmtpClient(Configuration.ConfigManager.SmtpServer);
//Logic to set the subject, message etc
client.Send(mail);
}
到目前为止,该逻辑在用户数量很少的情况下运行良好。我们正在尝试扩展它以能够发送一百万左右的电子邮件。
根据 MSDN,线程池线程的最大数量基于内存,根据 SO answer,对于 64 位架构,线程池线程的最大数量似乎是 32768。
这是否意味着,只要我们一次发送的电子邮件数量
当线程数超过阈值时,标记为//Post email processesing inrelated to send email的部分是否会被执行?
任何解释都非常感谢。
【问题讨论】:
-
您的 TCP 堆栈还有其他限制。可以与 SMTP 服务器同时建立 32767 出站 TCP 连接吗?
标签: .net multithreading .net-4.0 asp.net-4.0 threadpool