最简单的是用Task的WaitAll
Task<int, int>[] tasks = new Task<int, int>[n];
for (int i = 0; i < n; i++)
{
    tasks[i] = Task.Factory.StartNew(i => { get(i); return 0; });
}
Task.WaitAll(tasks);

解决方案 »

  1.   

    为什么不把do放在线程的最后面做,这样线程执行完后,do方法就会被调用。而且也不会影响到界面其它操作.Task.Factory.StartNew(()=>
    {
        for (int i = 0; i < n; i++)
       {
          get(i);
        }
       do();
    });
      

  2.   

    for (int i = 0; i < n; i++)
    {
    Thread t = new Thread(new ParameterizedThreadStart(get));
    t.Start(i);
    }而且你的这种做法很有问题。如果n非常大,你岂不是创建了很多线程.
      

  3.   

    额.谢谢你的指点,不过我这段代码是并发执行get请求的,为了时间考虑,就得同时执行好多个......
      

  4.   

    试了下这段代码,第一句报错啊,是为什么呢?
    .NET 4.0么?