2009-08-17 12 views
8

Silerlightで生成されたWCFプロキシクラスは、非同期呼び出しのみを提供するのはなぜですか?Silverlight WCFプロキシ非同期のみ?

は、私は本当に(BackgroundWorkerの中など)非同期パターン

EDITを必要としない場合があります。時々私はWCF呼び出し2の結果を処理する必要があります。私が待っていれば(アプリケーションのビジネスはそれを許して)、両方の呼び出しを終了し、処理するためにはるかに単純だっただろう。しかしnoooo .... async! :P

答えて

6

実際には、同期呼び出しを行うことができない技術的な理由があります。少なくとも「メイン」ブラウザスレッドからです。つまり、ブラウザが同じスレッド上のすべてのプラグインAPI呼び出しを呼び出すからです。ネットワークコールバックを待っている間にそのスレッドをブロックすると、ネットワークコールバックが通過せず、アプリケーションがデッドロックします。つまり、同期APIは別のスレッドから開始された場合はうまく動作します。つまり、アプリケーションが最初にQueueUserWorkItemを実行してブラウザスレッドから降りる場合ですが、同期オプションを提供して紛らわしいと感じました時間のいくつかを働かせてください。

+1

UIスレッドから呼び出されたときに有用な例外(たとえば、「この関数は非UIスレッドのみが呼び出すことができるため、この関数は同期的です」など)をスローする同期APIは使用できません。 – Gabe

7

私が理解しているように、ここでの目的は、人々が間違ったことをするのを難しくすることです(UIから同期IO)。 WCFクラスを使用している場合は、おそらくそのクラスを使用しなければなりません。

+2

+1 Silverlightデベロッパーが自分自身を足で撃ってしまうのを防ぐために:-) –

+2

SilverlightはUIスレッドでネットワークコールを行うことができます(これはブラウザーの制限同じように)。したがって、同期IOは、悪いことにブラウザをロックするだろう。 –

+0

"Silverlight開発者が足で自分自身を撮影できないようにする";今私はデータを収集して提示するために4つの非同期要求を待たなければならず、自分自身を足で撃つことはできません。ランタイムは足に私を撃った。便利です.. –

0

Andreiでは、非同期パターンを使用しても、コードを書く方法を単純化するだけで、4つの非同期リクエストを狂わせることなく、読みやすく、メンテナンスが簡単なコードを書くことができます。 このライブラリーを見てくださいhttp://syncwcf.codeplex.com/

関連する問題