我有一个for循环,它循环了大约500次。在每次迭代中,它调用一个方法,这需要大约1分钟的时间。因此,我必须等待500分钟。这是很长的时间。
我想让它使用线程工作,但当我同时创建500个线程时,我得到了一个异常。
我想我需要使用“队列线程”。例如,启动10个线程,当一个线程完成后,再启动一个新线程。这样,总会有10个线程同时工作--不能少,也不能多。
这个是可能的吗?
发布于 2015-07-30 10:09:50
如果您不关心方法的执行顺序,可以尝试使用异步编程并为每个循环创建任务,然后等待它们完成。
void Main()
{
var tasks = Enumerable.Range(0, 500).Select(e => System.Threading.Tasks.Task.Run(() => DoWork(e)));
System.Threading.Tasks.Task.WaitAll(tasks.ToArray());
}
public void DoWork(int i)
{
Console.WriteLine(i.ToString());
}如果您想要限制并行运行的任务数量,您可以运行for循环,在批处理中创建任务,并等待它们完成后再移动到下一个批处理。
发布于 2015-07-30 10:10:03
您需要更具体地说明您的需求,但是像Parallel.ForEach这样的东西可能会有所帮助,因为它可以为您管理线程的数量。
例如:
static void Main(string[] args)
{
List<string> stringList = new List<string>();
stringList.Add("A");
stringList.Add("B");
stringList.Add("C");
Parallel.ForEach(stringList, aString =>
{
Console.WriteLine(aString);
});
Console.WriteLine("Hello");
}https://stackoverflow.com/questions/31713996
复制相似问题