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

时间:2010-06-15 11:22:16

标签: .net asynchronous iasyncresult

只是想知道当你想要进行多次异步调用时,是否有人可以在某个代理的实例上澄清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 个答案:

答案 0 :(得分:3)

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