デリゲートの単一インスタンスを使用して、複数の非同期リクエストを開始できますか?
-
27-09-2019 - |
質問
誰かがの使用を明確にできるかどうか疑問に思いました 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
パラメーターとして、私は前者が正しいと仮定しますが、ドキュメントにはどちらの方法でも示すものは何も見えません。
解決
はい、問題ありません。 begininvoke()への呼び出しごとに別のiasyncresultが得られます。デリゲートオブジェクト自体の開始スレッドに関連する状態はありません。
所属していません StackOverflow