2

以下のコードは、基本的に SilverLight アプリケーションでドメイン サービスを呼び出しています。

LoadOperation<tCity> loadOperation = _dataContext.Load(query,callBack, true);

最初に行う操作を教えてください。

loadOperation 変数が割り当てられる前または割り当てられた後に callBack メソッドが呼び出されますか?

ありがとう

4

3 に答える 3

2

非同期操作であると仮定すると、理論的にはどちらの方法でも発生する可能性があります。非同期操作は別のスレッドで発生する必要があり、それが戻る前に終了した場合Loadは、割り当てが完了する前にコールバックを呼び出すことができます。

実際には、非同期呼び出しは、メソッドの最後でハウスキーピングが行うよりもはるかにLoad長くかかると予想されますが、その仮定をコードに入れることもありません。割り当てがコールバックの前に行われることを保証する明示的な同期がない限り、それに頼るのは良い考えではないと思います。

現時点では割り当てが常に最初に行われる場合でも、次のことを考慮してください。

  • 現時点でネットワーク接続がない場合はどうなりますか? 非同期呼び出しはすぐに失敗する可能性があります。
  • クライアント側にキャッシングを追加するとどうなりますか? 呼び出しは非常に迅速に成功する可能性があります。
  • RIA サービスに対してどのようなテストを行うことができるかはわかりませんが、同じスレッドでコールバックを実行させることで、非同期呼び出しをモックできるようにしたい場合があります課題前のテスト。真に非同期のモック呼び出しを強制することでこれを回避できますが、テストでスレッド化を処理すると面倒になる可能性があります。すべてを同期させるのが最も簡単な場合もあります。

編集:私はこれについてもっと考えていて、実際にはほとんどの場合うまくいくにもかかわらず、この仮定をするべきではないという私の直感の背後にある理由を理解しようとしています.

操作の順序に依存することは、非同期性の精神に反します。

(IMO)何かを開始し、いつでも戻ってくる準備ができている必要があります。そのように考えるべきです。「レスポンスが返ってくるまでに少しだけ作業ができるはずだ」という滑りやすい坂道を下り始めると、不確実性の世界に行き着きます。

于 2010-10-07T15:33:17.813 に答える
0

まず、前提条件なしでコールバックを記述します。しかし、それを除けば、割り当ての前にコールバックがどのように発生する可能性があるかわかりません。ロード操作は、スレッドがスピンされた直後に戻る必要があります。

于 2010-10-10T02:37:25.590 に答える
0

この非常に具体的な RIA サービスの質問には、次の 3 つの回答が考えられます。

  1. コールバックの前に割り当てを返します。
  2. 割り当ての前にコールバックが発生する可能性があります。
  3. 気にしない。

ケース 1: 問題の実際のロード メソッドの .Net Reflector 調査に基づくと、リターンが発生する前にコールバックを呼び出すことは不可能であると思われます。(誰かがバックグラウンド スレッドをスピンアップする複雑さを説明することを歓迎すると主張したい場合)。

ケース 2: 「空が落ちてくる」可能性がある という証明は、反映されたコードで示す必要があります。(誰かがこれをサポートしたい場合は、バックグラウンド スレッドのスピンアップの複雑さを説明することも歓迎します)。

ケース 3: 実際には、RIA サービスのロード メソッドの戻り値は、通常、遅延読み込みデータ ソースを割り当てるために使用されます。コールバックでは使用されません。コールバックには、読み込まれたデータの独自のコンテキストがパラメーターとして渡されます。

StackOverflow はすべて実用的なコードの回答に関するものであるため、唯一の実用的な回答はオプション 3 です。

気にしません(コールバックからの割り当て値を使用する/使用しないように)。

于 2010-10-14T13:32:19.503 に答える