2010-06-15 226 views
2

只是想知道是否有人可以澄清使用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作为参数我会假设前者是正确的,但我不能在文档中看到任何指示任何方式。

回答

3

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

相关问题