Silverlightがサービス参照を追加する理由 IAsyncResultの代わりにイベントを使用しますか?

asynchronous service-reference silverlight wcf
Silverlightがサービス参照を追加する理由 IAsyncResultの代わりにイベントを使用しますか?

「Webリファレンスの追加」は、イベントを使用するサービスへのXXXAsync呼び出しを生成し、呼び出しが完了したことを発信者に通知します。

WPFやコンソールアプリなどのサービス参照を追加するには、非同期操作を生成するように指示されると、IAsyncResultデザインパターン(BeginXXXおよびEndXXX操作)を使用します。 私の理解では、これは一般的に使いやすさと柔軟性の一歩と見なされていました-コールバックを使用でき、EndXXXを呼び出すだけでいつでもブロックを開始でき、待機ハンドルをグループ化して一連の操作をブロックできますポーリングなどができます

SilverlightのASRがIAsyncResultを使用しないのはなぜですか? 私の推測では、デザイナーは完全な非同期性が実際に必要であることを非常に明確にしたかったので、IAsyncResultデザインパターンを使用していた場合、Beginの直後にEndを呼び出して試すのは簡単すぎたでしょう。ほぼ100%の新しい開発者や非同期を十分に把握していない人々に見舞われていたはずのつまずきのブロックに。

  0  0


ベストアンサー

Silverlightチームは、イベントベースの非同期パターンへの即時アクセスを提供しました。これは、アプローチが使いやすい(ただし柔軟性がはるかに低い)ためです。 たとえば、表示スレッドでイベントが発生すると、開発者はスレッドモデルについて考えることを嫌がり、それを忘れることができます。

柔軟性を向上させる必要がある場合(私として)、SilverlightでもBegin / End asyncパターンを使用できます。 実際、イベントベースの生成コードはIAsyncResultに基づいています。

生成されたチャネルインターフェイスはbegin / endメソッドを定義し、http://msdn.microsoft.com/fr-fr/library/ms576132(VS.95).aspx [channel factory]を使用して、次の使用可能な実装を取得できます。インターフェース。

5


MSDNから:

__
通常、前述のイベントベースの非同期モデルは、サービスが呼び出されたのと同じスレッドで完了イベントを発生させます。 多くの場合、UI(ユーザーインターフェイス)スレッドからサービスを呼び出し、完了イベントハンドラーでUIコンポーネント(この例ではテキストボックスなど)を直接更新できるため、これは多くのアプリケーションで便利です。

場合によっては、完了イベントをバックグラウンドスレッドで処理したい場合があります。 このため、またはその他の理由で、IAsyncResultメカニズムとBegin / Endメソッドに基づいた代替の非同期呼び出しモデルを使用できます。

このモデルを使用するには、最初にプロキシを適切なインターフェイスタイプにキャストする必要があります。 インターフェイスタイプは、Add Service Referenceツールによってプロキシとともに自動的に生成されます。 その後、適切なBeginメソッドを呼び出すことができます。

CopyIAsyncResult iar =((CustomerService)proxy).BeginGetUser(userId、GetUserCallback、proxy);
__

MSDNリンクのKimberlyに感謝します。

2


タイトルとURLをコピーしました