1
我希望只使用2个线程,使for循环的数量限制。我想这样的代码:C#TPL for循环 - 线程
ParallelOptions po = new ParallelOptions {
MaxDegreeOfParallelism = 2
};
Parallel.For(0, width, po, x => {
sb.Append(Thread.CurrentThread.ManagedThreadId);
sb.Append(Environment.NewLine);
for (int y = 0; y < height; y++) {
double a = (double)(x - (width/2))/(double)(width/4);
double b = (double)(y - (height/2))/(double)(height/4);
}
});
但是,当我显示Thread.CurrentThread.ManagedThreadId
,它会创建2组以上的ID。我也尝试在循环之前添加此代码:
ThreadPool.SetMaxThreads(2, 2);
ThreadPool.SetMinThreads(2, 2);
但它也不会改变任何东西。有人可能有任何想法如何解决这个问题?
我希望你不使用StringBuilder的' '在多线程环境中,因为它不是线程安全的 – MickyD
我只用这个来创建所有线程ID的大字符串。你认为,这个StringBuilder会造成运行多于2个线程的问题吗? –
是的。只要使用'Console.WriteLine(Environment.CurrentManagedThreadId)'或'Trace.TraceInformation .....' – MickyD