【发布时间】:2017-04-19 08:56:09
【问题描述】:
我只想使用 2 个线程来创建 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,因为它不是线程安全的 -
我只用它来制作带有所有线程 id 的大字符串。你认为这个 StringBuilder 在运行超过 2 个线程时会出现问题吗?
-
是的。只需使用
Console.WriteLine(Environment.CurrentManagedThreadId )或Trace.TraceInformation..... -
还是不行:/
-
@MarMosh 这并不是一个答案
标签: c# multithreading task-parallel-library