代码之家  ›  专栏  ›  技术社区  ›  Raynos

C#平行foreach while循环是否可行?

  •  4
  • Raynos  · 技术社区  · 14 年前

    Parallel.Foreach(Connections, c =>
        {
            Input in = c.getInput();
            while (in.hasNext()) {
                object o = in.getNext();
                dosomething(o);
            }
        }
    );
    

    哪里在.hasNext中()只等待输入流中的对象并返回true。基本上,我可以在并行foreach结构中运行一组无限while循环,同时保证它们将同时运行。

    3 回复  |  直到 14 年前
        1
  •  0
  •   Jackson Pope    14 年前
    1. 使用它的线程数是有限的,因此一些元素将被一个接一个地处理。

    2. 枚举时编辑列表不好。你可能会得到一个例外(取决于你正在使用的列表)

    public ConnectionOpen(data)  
    {  
        Connection conn=new ...  
        lock(Connections)  
        {  
             Connections.Add(conn);  
        }  
    
        new Thread(()=>  
        {  
            Receive(conn);//infinite loop goes here  
        }).Start();  
    }  
    
    public ConnectionClose(conn)  
    {  
        bool removed=false;  
        lock(Connections)  
        {  
            removed=Connections.Remove(conn);  
        }  
        if(removed) conn.StopReceiving();  
    }  
    
        2
  •  0
  •   Thomas Levesque    14 年前

    基本上,我可以在并行foreach结构中运行一组无限while循环,同时保证它们将同时运行

    不会。只有有限数量的工作线程将同时启动,因此如果运行的无限循环数超过线程数,则最后一个线程将永远不会运行。。。

        3
  •  0
  •   Rick    14 年前

    您可以尝试使用ParallelWhile构造,团队在博客中介绍了几种方法, here is one .