我已经在.NET 2.0处理使用System.Threading.Semaphore
foreach(Item i in millonItemsIterator) {
ItemThreadManager m = new ItemThreadManager(i);
System.Threading.Thread t = new System.Threading.Thread(m.Process);
t.Start()
}
SendCompletionEmail();
public class ItemThreadManager {
private static Semaphore s = new Semaphore(20, 20);
private Item item = null;
public ItemThreadManager(Item i) {
item = i;
}
public void Process() {
s.WaitOne();
// do something with item.
s.Release();
}
}
写了下面的代码
我身后用旗语的做法是我处理的millionItems列表中的项目意向批量为20个。
但我不希望发送电子邮件,直到所有百万项已处理。上述代码在处理完成前发送电子邮件。
我的理解是,上面的代码一次只能处理20个项目。并会阻止所有20个线程正在使用中......但我认为对于最后20个......它不会等待它们完成,而是直接发送电子邮件。那么只需要过去20个月,我如何实施加入?
我的理解是否正确?
对不起,我忘了提及,我在.NET 2.0上编写此代码。我不认为该任务类在.NET 2.0中 – 2013-02-27 11:51:18
@KnowsNotMuch然后,而不是一个线程尝试使用BackgroundWorker,它会给你一个事件触发完成,然后你可以'SendEmail' – dutzu 2013-02-27 11:54:34