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

我可以使用委托的单个实例启动多个异步请求吗?

  •  2
  • RobV  · 技术社区  · 15 年前

    只是想知道是否有人可以澄清 BeginInvoke 当您希望进行多个异步调用时,在某个委托的实例上,因为msdn文档根本没有涉及/提到这一点。

    我想做的事情如下:

    MyDelegate d = new MyDelegate(this.TargetMethod);
    List<IAsyncResult> results = new List<IAsyncResult>();
    
    //Start multiple asynchronous calls
    for (int i = 0; i < 4; i++)
    {
       results.Add(d.BeginInvoke(someParams, null, null));
    }
    
    //Wait for all my calls to finish
    WaitHandle.WaitAll(results.Select(r => r.AsyncWaitHandle).ToArray());
    
    //Process the Results
    

    问题是,我可以对委托的一个实例执行此操作吗?或者对于每个单独的调用,我需要委托的一个实例吗?

    鉴于 EndInvoke() 采取一个 IAsyncResult 作为一个参数,我假设前者是正确的,但在文档中我看不到任何可以指示这两种方式的内容。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Hans Passant    15 年前

    是的,没问题。对BeginInvoke()的每个调用都将获得不同的IAsyncResult。委托对象本身没有与已启动线程关联的状态。

    推荐文章