デリゲートの単一インスタンスを使用して、複数の非同期リクエストを開始できますか?

StackOverflow https://stackoverflow.com/questions/3044644

  •  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が得られます。デリゲートオブジェクト自体の開始スレッドに関連する状態はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top