gpt4 book ai didi

c# - C#多线程-限制并发线程数

转载 作者:太空宇宙 更新时间:2023-11-03 17:57:41 28 4
gpt4 key购买 nike

我对控制我要运行的并发线程数量有疑问。让我解释一下我目前的工作:例如

 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线程池实例。

关于c# - C#多线程-限制并发线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7012594/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com