【发布时间】:2013-10-16 06:33:38
【问题描述】:
我有一个数据集中的 ReferenceID(字符串)列表。这些 ReferenceID 可以具有这样的值 ("CQ1258891","CQ1258892","CQ1258893"....""CQ1258993")。我的代码中有一个逻辑可以为每个 ReferenceID 发送邮件。
到目前为止,我正在同步循环遍历每个 ReferenceID。因此,发送每封邮件需要更多时间。 我一直在使用 .NET 3.0,所以我没有选择在 .NET 4.0 中使用 TPL。
我一直在寻找一种多线程机制来异步发送每个 ReferenceID 的邮件。到目前为止,我已经尝试了以下代码,但它没有按预期工作。
foreach (DataRow row in qrefSet.Tables[0].Rows)
{
string refId = Convert.ToString(row["ReferenceID"]);
if (!string.IsNullOrEmpty(refId))
{
Thread thread = new Thread(() => apeDBAdapter.SendEmail(personId, refId, parentReferenceID, customerName, queueId));
thread.Start();
}
}
请分享为我的实现实现多线程foreach循环的有效机制。
谢谢, 斯里拉姆
【问题讨论】:
-
为什么不使用线程池中的线程?阅读msdn.microsoft.com/en-us/library/… - 让他们做线程管理的工作
-
您至少应该升级到 .NET 3.5。 “对 3.5 SP1 之前的 .NET Framework 3.x 版本的支持将一直支持到 2011 年 7 月 12 日。在此日期之后,支持将终止;我们强烈建议客户在 2011 年 7 月 12 日之前迁移到 .NET Framework 3.5 SP1。 "
-
在.NET 3.5的情况下,将如何实现?我很想知道这样做的正确方法。
-
创建线程很昂贵。使用 ThreadPool.QueueUserWorkItem 将您的作业排队
-
ilansch & Carlos,我尝试了 ThreadPool.QueueUserWorkItem。我有多个参数要传递,但这个方法只需要两个参数。无法传递剩余参数!知道我该怎么做吗?这些是我的参数(personId、refId、parentReferenceId、customerName、queueId)
标签: c# multithreading .net-3.0