首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#线程多队列

C#线程多队列
EN

Stack Overflow用户
提问于 2015-07-30 09:54:07
回答 2查看 78关注 0票数 0

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

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

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

这个是可能的吗?

EN

回答 2

Stack Overflow用户

发布于 2015-07-30 10:09:50

如果您不关心方法的执行顺序,可以尝试使用异步编程并为每个循环创建任务,然后等待它们完成。

代码语言:javascript
复制
     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
EN

Stack Overflow用户

发布于 2015-07-30 10:10:03

您需要更具体地说明您的需求,但是像Parallel.ForEach这样的东西可能会有所帮助,因为它可以为您管理线程的数量。

例如:

代码语言:javascript
复制
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");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31713996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档