2

BeginInvokeMSDN のドキュメントではこれについてまったく説明も言及もされていないため、複数の非同期呼び出しを行いたい場合に、誰かがデリゲートのインスタンスでの使用を明確にできるかどうか疑問に思いました。

私がやりたいことは、次のようなものです。

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と、前者が正しいと思いますが、ドキュメントにはどちらの方法も示していません。

4

1 に答える 1

3

はい、問題ありません。BeginInvoke() への呼び出しごとに異なる IAsyncResult を取得します。デリゲート オブジェクト自体には、開始されたスレッドに関連付けられた状態はありません。

于 2010-06-15T12:00:04.850 に答える