我在 .NET 2.0 中编写了以下代码
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();
}
}
我使用 Semaphore 方法的意图是我以 20 个为一组来处理millionItems 列表中的项目。
但我不希望在处理完所有百万个项目之前发送电子邮件。上面的代码在处理完成之前发送电子邮件。
我的理解是,上面的代码一次只能处理 20 个项目。如果所有 20 个线程都在使用中,则会阻塞....但我认为最后 20 个....它不会等待它们完成,而是直接发送电子邮件。那么对于最后 20 年,我如何实现加入?
我的理解正确吗?