【问题标题】:C# Threads Multiple QueueC# 线程多队列
【发布时间】:2015-07-30 01:54:06
【问题描述】:

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

我想让它使用线程来工作,但是当我同时创建 500 个线程时,我遇到了异常。

我想我需要使用“队列线程”。例如,启动 10 个线程,当一个线程完成后,再启动一个新线程。这样一来,总是有 10 个线程同时工作——不多不少。

这可能吗?

【问题讨论】:

  • "getting Exception" 没有说明问题(也没有显示您有异常的代码)...所以请尝试显示您尝试过的代码(最好编辑为与您的目标直接相关的小样本AND 异常)并且有问题,请确保发布准确的错误消息。

标签: c# multithreading queue threadpool


【解决方案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 循环,批量创建任务并等待它们完成,然后再移动到下一批。

【讨论】:

    【解决方案2】:

    您需要更具体地了解您的需求,但 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");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-13
      • 2010-10-28
      • 1970-01-01
      • 2013-07-20
      • 2010-10-29
      • 2010-10-22
      • 2013-10-10
      • 1970-01-01
      相关资源
      最近更新 更多