0

Silverlight ではすべての wcf サービス呼び出しが非同期であることは誰もが知っています。しかし、リクエストのタイミングについて何が言えるでしょうか? 次のコードの場合、「Hello B」の前に「Hello A」がサーバーに受信されるということは常に正しいですか?

ServiceClient プロキシ = 新しい ServiceClient();
ServiceClient proxy2 = new ServiceClient();

proxy.SayHelloAsync("こんにちは A");
proxy2.SayHelloAsync("こんにちは B");

コードを繰り返し実行すると、サーバーは常に「Hello A」を最初に受信しました。たまたま運が良かっただけ?

4

2 に答える 2

0

運が良かっただけです。私はほぼ同じテストを実行し、さまざまな順序でテストを完了させました。これは、実際のシナリオで特に当てはまります。たとえば、チャット アプリケーションなどで、多数の未処理の通話が同時に進行している可能性があります。呼び出し B の前に呼び出し A を終了する必要がある場合は、それらを何らかの方法で連鎖させる必要がありますが、そのためのメカニズムはどれもあまりきれいではありません。私の経験では、ある種の WaitHandle を使用するという推奨事項は危険な場合があります。走行距離はさまざまですが、私が見つけたのは、あまり注意しないと、WaitHandle を使用して WCF 呼び出しのタイミングを管理すると、重要なスレッドが機能しなくなる可能性があるということです。複雑ではありますが、「A」が完了したときに呼び出されるメソッドから「B」を呼び出す方が適切です。

于 2010-01-12T19:04:25.880 に答える
0

はい、非同期呼び出しが 2 つある場合は、いずれかを最初に終了させることができます。

完了するのを待つ必要がある場合は、WaitHandle

于 2010-01-12T18:03:21.547 に答える