我对控制我要运行的并发线程数量有疑问。让我解释一下我目前的工作:例如
var myItems = getItems(); // is just some generic list
// cycle through the mails, picking 10 at a time
int index = 0;
int itemsToTake = myItems.Count >= 10 ? 10 : myItems.Count;
while (index < myItems.Count)
{
var itemRange = myItems.GetRange(index, itemsToTake);
AutoResetEvent[] handles = new AutoResetEvent[itemsToTake];
for (int i = 0; i < itemRange.Count; i++)
{
var item = itemRange[i];
handles[i] = new AutoResetEvent(false);
// set up the thread
ThreadPool.QueueUserWorkItem(processItems, new Item_Thread(handles[i], item));
}
// wait for all the threads to finish
WaitHandle.WaitAll(handles);
// update the index
index += itemsToTake;
// make sure that the next batch of items to get is within range
itemsToTake = (itemsToTake + index < myItems.Count) ? itemsToTake : myItems.Count -index;
这是我目前所走的道路。但是我一点都不喜欢。我知道我可以“管理”线程池本身,但我不建议这样做。那么替代品是什么呢?信号量类?
谢谢。
不要使用THETREAPPOOL,而另辟(径(只需寻找google,就有六种实现方式)并自己进行管理即可。
不建议管理踏步池,因为可能还会进行许多内部工作,因此完全可以管理OWN线程池实例。
我是一名优秀的程序员,十分优秀!