以下のコードは、基本的に SilverLight アプリケーションでドメイン サービスを呼び出しています。
LoadOperation<tCity> loadOperation = _dataContext.Load(query,callBack, true);
最初に行う操作を教えてください。
loadOperation 変数が割り当てられる前または割り当てられた後に callBack メソッドが呼び出されますか?
ありがとう
以下のコードは、基本的に SilverLight アプリケーションでドメイン サービスを呼び出しています。
LoadOperation<tCity> loadOperation = _dataContext.Load(query,callBack, true);
最初に行う操作を教えてください。
loadOperation 変数が割り当てられる前または割り当てられた後に callBack メソッドが呼び出されますか?
ありがとう
非同期操作であると仮定すると、理論的にはどちらの方法でも発生する可能性があります。非同期操作は別のスレッドで発生する必要があり、それが戻る前に終了した場合Load
は、割り当てが完了する前にコールバックを呼び出すことができます。
実際には、非同期呼び出しは、メソッドの最後でハウスキーピングが行うよりもはるかにLoad
長くかかると予想されますが、その仮定をコードに入れることもありません。割り当てがコールバックの前に行われることを保証する明示的な同期がない限り、それに頼るのは良い考えではないと思います。
現時点では割り当てが常に最初に行われる場合でも、次のことを考慮してください。
編集:私はこれについてもっと考えていて、実際にはほとんどの場合うまくいくにもかかわらず、この仮定をするべきではないという私の直感の背後にある理由を理解しようとしています.
操作の順序に依存することは、非同期性の精神に反します。
(IMO)何かを開始し、いつでも戻ってくる準備ができている必要があります。そのように考えるべきです。「レスポンスが返ってくるまでに少しだけ作業ができるはずだ」という滑りやすい坂道を下り始めると、不確実性の世界に行き着きます。
まず、前提条件なしでコールバックを記述します。しかし、それを除けば、割り当ての前にコールバックがどのように発生する可能性があるかわかりません。ロード操作は、スレッドがスピンされた直後に戻る必要があります。
この非常に具体的な RIA サービスの質問には、次の 3 つの回答が考えられます。
ケース 1: 問題の実際のロード メソッドの .Net Reflector 調査に基づくと、リターンが発生する前にコールバックを呼び出すことは不可能であると思われます。(誰かがバックグラウンド スレッドをスピンアップする複雑さを説明することを歓迎すると主張したい場合)。
ケース 2: 「空が落ちてくる」可能性がある という証明は、反映されたコードで示す必要があります。(誰かがこれをサポートしたい場合は、バックグラウンド スレッドのスピンアップの複雑さを説明することも歓迎します)。
ケース 3: 実際には、RIA サービスのロード メソッドの戻り値は、通常、遅延読み込みデータ ソースを割り当てるために使用されます。コールバックでは使用されません。コールバックには、読み込まれたデータの独自のコンテキストがパラメーターとして渡されます。
気にしません(コールバックからの割り当て値を使用する/使用しないように)。