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
問題は、デリゲートの 1 つのインスタンスでこれを行うことができるか、または個々の呼び出しごとにデリゲートのインスタンスが必要かということです。
EndInvoke()
パラメータとして をとることを考えるIAsyncResult
と、前者が正しいと思いますが、ドキュメントにはどちらの方法も示していません。