在这个例子中,如果我想将一次可以执行函数Parallel.For
的线程数限制为十个,那么这是正确使用DoWork
循环吗?在十个线程中的一个可用之前,是否会阻塞其他线程?如果没有,什么是更好的多线程解决方案,仍然可以让我执行6000次以上的功能?
class Program
{
static void Main(string[] args)
{
ThreadExample ex = new ThreadExample();
}
}
public class ThreadExample
{
int limit = 6411;
public ThreadExample()
{
Console.WriteLine("Starting threads...");
int temp = 0;
Parallel.For(temp, limit, new ParallelOptions { MaxDegreeOfParallelism = 10 }, i =>
{
DoWork(temp);
temp++;
});
}
public void DoWork(int info)
{
//Thread.Sleep(50); //doing some work here.
int num = info * 5;
Console.WriteLine("Thread: {0} Result: {1}", info.ToString(), num.ToString());
}
}
答案 0 :(得分:15)
您需要使用传递给lambda函数的i
作为索引。 Parallel.For
使您免于使用循环计数器的麻烦,但您需要使用它!
Parallel.For(0, limit, new ParallelOptions { MaxDegreeOfParallelism = 10 }, i =>
{
DoWork(i);
});
至于你的其他问题: