私は代理人を使用していくつかの非同期関数呼び出しを設定するC#アプリケーションを開発中です。これらの呼び出しは複数呼び出しの対象になるため、userState
引数を取るデリゲートのBeginInvoke
メソッドのオーバーロードを使用する必要があります。例えば:Event-based Asynchronous Pattern Overview page on MSDNで複数の非同期呼び出しを行うREQUIRE unique userStates?
callerDelegate.BeginInvoke([fn_args...], callback, userState)
、それはuserStateについて述べている: シングル呼び出しと 複数の呼び出し:
は、潜在的に2つのオーバーロード、非同期操作のための があります。 は、 メソッドシグネチャでこれらの2つのフォームを区別できます。 複数呼び出しフォームには、userStateという追加の パラメータがあります。このフォーム は、 のコードで、 の操作が完了するのを待つことなく、Method1Async(文字列パラメータ、オブジェクト 、userState)を複数回呼び出すことができます。 別の の手で メソッド1Async(文字列パラメータ)を呼び出すと、 前の呼び出しが完了する前に、 メソッドが のInvalidOperationExceptionを発生させます。
複数呼び出しのオーバーロードのuserStateパラメーターを使用すると、 の操作で非同期の操作を区別することができます。 あなたは 各操作が完了すると、あなたの イベントハンドラはの インスタンスを決定することができ Method1Async(文字列 PARAM、オブジェクトuserState)、およびへの呼び出しごとに一意の値 (例えば、GUIDやハッシュコード)を提供しますオペレーションが完了イベントの を発生させました。
私の質問は:はuserState
は一意である必要がありますか?言葉はそれを単なる推薦にするか、または単にその例に関連するものと解釈することができます。私はコールバックに状態を渡す必要があります、私はそれが一意である必要はありません。 (私のアプリケーションでは、呼び出しの個々のインスタンスを追跡する必要はありません)。したがって、一意性は要件ですか? (おそらく、.NETの非同期フレームワークは、それを必要ですか?)
また、引用されたページはイベントベースの非同期操作のためです。これは私のケース(代理人を使った非同期呼び出し)にも当てはまりますか?
私は数日間GoogleとSOを検索し、まだ答えを見つける必要がありません。
ありがとうございます。
多くのありがとうございます! (そのような冗長な質問に対するそのような簡潔な応答!) – paul