gpt4 book ai didi

c# - 在 C# 中使用有限数量的作业和有限数量的事件线程进行线程化

转载 作者:行者123 更新时间:2023-12-03 21:36:22 25 4
gpt4 key购买 nike

我有一个看起来像这样的循环:

var list = new List<float>();
while (list.Count < wantedNumberOfJobs)
{
var resource = ... //gets the resource
lock (resource)
{
ThreadPool.QueueUserWorkItem(DoWork, /*wrap resource and list into an object*/);
}
}

//continue pass this point when all the threads are finished

及工作方法:

private void DoWork(object state)
{
var list = (/*wrapperObject*/)state.List;
var someFloat = //do the work to get the number

lock (list)
{
list.Add(someFloat);
}
}

本质上,我想完成大量但特定的(由 wantedNumberOfJobs 指定)数量的工作。正如您在 DoWork 方法中所见,这些作业中的每一个都会将一个项目插入到 list 中。

我不确定这段代码是否向我保证 list 将包含超过指定点的 wantedNumberOfJobs 项。我还想限制事件线程的数量。我使用了 System.Threading.Semaphore 类,但我不确定这是最好的解决方案。

如果有任何帮助,我将不胜感激。谢谢!

最佳答案

也许你可以像这样使用 Parallel.For:

Parallel.For(0, wantedNumberOfJobs, i => {
var resource = ... //gets the resource
DoWork(Resource);
});

关于c# - 在 C# 中使用有限数量的作业和有限数量的事件线程进行线程化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7190219/

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