我有一个有多个线程的程序。用户可以选择要选择的线程数量,并按如下方式处理:
for (int i = 0; i <= form.Bots - 1; i++)
{
(new Thread(() => {
doThreadWork();
form.Console = "Thread(" + Thread.CurrentThread.ManagedThreadId + ") FINISHED " + usedCombos.Count + "/" + form.Combolist.Count;
})).Start();
}
doThreadWork 是每个线程在关闭之前必须完成的方法。 我有一个数组列表,它由多个项目(行)组成。
例如。
value:value
value1:value1
value2:value2
value11:value11
value4:value4
value13:value13
现在我的程序中存在线程,以使处理这些值的过程更快。程序检查哪个值有效,哪个值无效。 目前我已经实现了一种(可怕的?)方法来选择要检查线程的值。
int index = GetRandomNumber(0, form.Combolist.Count);
这会在列表中选择一个随机索引。 我实现了这个,因为否则如果我只使用 foreach 循环,每个线程都会同时检查相同的值。我需要得到这样的东西:
将以下内容想象为控制台日志。每个线程同时运行。 值总数为 12。运行的线程为 4。
Thread 1: checking index 1
Thread 2: checking index 2
Thread 3: checking index 3
Thread 4: checking index 4
Thread 1: checking index 5
Thread 2: checking index 6
Thread 3: checking index 7
Thread 4: checking index 8
Thread 1: checking index 9
Thread 2: checking index 10
Thread 3: checking index 11
Thread 4: checking index 12
Thread 1: FINISHED
Thread 2: FINISHED
Thread 3: FINISHED
Thread 4: FINISHED
我真的希望你们中的一些先进人士可以帮助我解决这个问题,我没那么先进:)
最佳答案
C# 提供了许多比生成新线程更高级的并行处理方法。
您可以使用的一个选项是 parallel LINQ :
int dop = 4;// set the number of threads to use
form.Combolist
.AsParallel()
.WithDegreeOfParallelism(dop)
.ForAll(i => processElement(i));
您还可以使用 Parallel.ForEach
.
关于c# - 如何让每个线程选择不同的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34414908/