C#线程多个队列

时间:2015-07-30 01:54:07

标签: c# multithreading queue threadpool

我有一个for循环,它循环约500次。在每次迭代时,它调用一个方法,大约需要1分钟。因此,我必须等待500分钟。这是很长的时间。

我希望使用线程来实现这一点但是当我同时创建500个线程时,我得到了一个例外。

我想我需要使用" Queue Threads"。例如,启动10个线程,当一个完成时,然后启动一个新线程。这样,总有10个线程同时工作 - 不能少,不多。

这可能吗?

2 个答案:

答案 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");
}