C#如何在循环方法中的值全部循环完成后,再同时执行同一方法。如:
       foreach (Socket s in dictSocket.Values)
         {
             s.Send(arrMsg);//要求循环完成之后这个方法同时执行。
         }

解决方案 »

  1.   

    goto或者在来个for在外面
      

  2.   

    把循环写进一个方法里,循环完了再调用本方法:
    Like this:private void func()
    {
          foreach(var i in list)
          {
            Console.WriteLine(i);
          }
          System.Threading.Thread.Sleep(500);
          func();
    }
      

  3.   

           foreach (Socket s in dictSocket.Values)
             {         }
           foreach (Socket s in dictSocket.Values)
             {
                 s.Send(arrMsg);//要求循环完成之后这个方法同时执行。
             }
      

  4.   

    我的想法是把循环调用方法改成同一时刻执行循环内的方法。同一时刻执行。。
    搞不懂你为啥有这种需求,你的socket对象已经在集合里了,你这样的循环就已经是“同一时刻”执行,因为你有多个socket对象,想使用这些对象,必然要一个个去访问,就算再怎么要封装方法,集合,还是需要一个个去访问
      

  5.   

    delegate void Pile();
    Pile pile;
    foreach (Socket s in dictSocket.Values)
    {
         pile += ( ) => { s.Send(arrMsg); }//要求循环完成之后这个方法同时执行。
    }
    pile();
      

  6.   

    伪代码
    Task[] x;foreach 
    {
       x.add(new task)
    }Task.WhenAll(x).Continue()同一时间执行,换成俺们的说法就是并行。不过你的需要注意,并行的前提其实是他不并发,只有不并发抢资源的情况我们才大胆的并行,如果底下有并发操作,你只能池化或者限流,让他有限度并行
      

  7.   

    如果简单点plinq也行,只是你的描述有些绕。我不知道你到底是要并行啊,还是要异步等待所有任务完成而且上下文比较缺乏。从sockect这玩意。我估计你是想同时给多个client发消息,这个直接异步或者plinq就好,交给微软的池自己做就好
      

  8.   

    你觉着那个循环是一个一个发的,因为他是同步代码,对于socket来说他自己现在已经实现了异步发送,所以如果不太纠结“完全一起执行”的话,直接使用socket的异步发送就好,异步代码不会阻塞那里,那个循环一会就表象上结束了,至于实际上的结束,那就得看内部线程池调度,socket自己的限流,上行带宽这些东西了
      

  9.   

    Send(bytes) 语句执行得很快,如果这么简单的一条语句你也放到子线程中,那么只能说程序运行极慢。根本快不了。真正要放到线程中的,是对高层次的解析和业务处理任务进行并行化,不在这一类语句层面上设计。这类 for 循环就没有必要实例什么子线程。另外,你说的“全部循环完成后,在执行同一方法”这个本身就有语法毛病,看不懂。既然执行方法完毕了,为什么再执行一遍?
      

  10.   


    不好意思,可能是我没有描述清楚,其实我的意思就是想要同一时刻(精确到毫秒)同时给客户端发送消息,也就是并行。sockect是我从集合中取得,所以用的循环,也可以单独取,然后让所有的sockect同时发消息。
      

  11.   

    我的想法是把循环调用方法改成同一时刻执行循环内的方法。同一时刻执行。。
    搞不懂你为啥有这种需求,你的socket对象已经在集合里了,你这样的循环就已经是“同一时刻”执行,因为你有多个socket对象,想使用这些对象,必然要一个个去访问,就算再怎么要封装方法,集合,还是需要一个个去访问不好意思,可能我没描述清楚,我的需求就是把一个个循环发送消息,改成同时发送。
      

  12.   

    想要同一时刻(精确到毫秒)同时给客户端发送消息
    这是不可能的,一心不二用,你只有一颗cpu,任何时刻都只能做一件事情
      

  13.   

    这么说吧,如果要“同时发送”,那么不要使用 windows 等等桌面操作系统,不要使用操作系统而直接用 c、汇编语言去写代码,直接基于 BIOS 或者其它底层的简单系统去自己设计程序。这个时候就无所谓什么进程、线程概念。这个时候,你就不会纠结概念了。而且你可以自己“创造”任何概念了。