在这个例子中,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());
}
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*ens 15
您需要使用i传递给lambda函数作为索引.Parallel.For让您免于使用循环计数器的麻烦,但您需要使用它!
Parallel.For(0, limit, new ParallelOptions { MaxDegreeOfParallelism = 10 }, i =>
{
DoWork(i);
});
Run Code Online (Sandbox Code Playgroud)
至于你的其他问题:
| 归档时间: |
|
| 查看次数: |
13881 次 |
| 最近记录: |