我已經在.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