我有一个for
循环,它循环约500次。在每次迭代时,它调用一个方法,大约需要1分钟。因此,我必须等待500分钟。这是很长的时间。
我希望使用线程来实现这一点但是当我同时创建500个线程时,我得到了一个例外。
我想我需要使用" Queue Threads"。例如,启动10个线程,当一个完成时,然后启动一个新线程。这样,总有10个线程同时工作 - 不能少,不多。
这可能吗?
答案 0 :(得分:1)
如果您不关心方法的执行顺序,您可以尝试使用异步编程并为每个循环创建任务并等待它们完成。
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循环,批量创建任务并等待它们完成,然后再转到下一批。
答案 1 :(得分:0)
您需要更具体地了解您的需求,但像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");
}