只是想知道当你想要进行多次异步调用时,是否有人可以在某个代理的实例上澄清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
作为参数,我会假设前者是正确的,但我在文档中看不到任何指示任何方式。
答案 0 :(得分:3)
是的,没问题。每次调用BeginInvoke()时,您将获得不同的IAsyncResult。在委托对象本身中没有与已启动线程关联的状态。