質問

タスクベースの非同期パターンについて読んだことがありますが、それは素晴らしい音です。現在、他のWCFサービスを呼び出す必要があるWCFサービスがあります。これらのサービスは異なる結果を返します。 Asyncはどのようにしてこれらのサービスを新しいパターンで呼び出し、すべてを完了するのを待つことができますか?

役に立ちましたか?

解決

編集:beginxxxとendxxxメソッドがある場合は、参照してください この質問 それらをどのように変えるかについて Task<T> タスク - そして それから 私の答えの残りは適用されます。

基本的に、必要です TaskFactory<T>.FromAsync(...).


使用できます TaskEx.WhenAll, 、最終的にはそうなるでしょう Task.WhenAll.

これが待つことに注意してください すべて 早期にエラーが発生した場合でも、タスクを終了します。

タスクには異なる結果タイプがあるため、最初に設定し、すべてが完了するのを待ってから、結果をつかむ必要があります。

var t1 = service1.DoFirstTaskAsync();
var t2 = service2.DoSecondTaskAsync();
var t3 = service3.DoThirdTaskAsync();

await TaskEx.WhenAll(t1, t2, t3);

var result1 = t1.Result;
var result2 = t2.Result;
var result3 = t3.Result;

// Use the results

または、最初にタスクを発射して、それぞれを別々に待ちます。タップのタスクは「ホット」であることに注意してください - それらを作成するとすぐに開始します。だからこれもうまくいくでしょう - しかし今回は t1 例外をスローします しない を待つ t2t3 完了するには:

var t1 = service1.DoFirstTaskAsync();
var t2 = service2.DoSecondTaskAsync();
var t3 = service3.DoThirdTaskAsync();

var result1 = await t1;
var result2 = await t2;
var result3 = await t3;

// Use the results

これについて最初にブログを書いています 一般的に複数のタスクを待っています そして、について 複数のタスクを待つときの例外.

他のヒント

ASYNC/待望モデルをサポートするWCFチームの計画について知りたい場合は、次のブログ投稿をご覧ください。

http://blogs.msdn.com/b/endpoint/archive/2010/11/13/simplifided-asynchronous-promming-model-in-wcf-with-async-await.aspx

アマデオ

見る async ctp- async/waintを使用してWCFサービスを呼び出すにはどうすればよいですか?
非同期のクライアントとサービスの例。または使用します asyncwcflib, 、それはアンドをサポートします 俳優ベースのプログラミングモデル アプリケーション内またはネットワーク上の他のサービスを呼び出すサービスの例があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top