Question

J'ai lu sur le modèle asynchrone basé sur les tâches et il sonne bien. Maintenant, j'ai un service WCF qui a besoin d'appeler d'autres services WCF. Ces services reviennent differnet résultat. Comment peut appeler ces services async avec le nouveau modèle et attendre tous les remplir?

Était-ce utile?

La solution

EDIT: Si vous avez juste des méthodes BeginXXX et EndXXX, voir cette question pour savoir comment transformer ces tâches dans de Task<T> -. et puis le reste de ma réponse sera applicable

En gros, vous avez besoin TaskFactory<T>.FromAsync(...) .


Vous pouvez utiliser TaskEx.WhenAll, qui finira par être Task.WhenAll.

Notez que ce attendra tous les tâches à la fin, même s'il y a une erreur précoce.

Comme les tâches ont différents types de résultats, vous aurez besoin de les mettre en place pour commencer, attendez tous à la fin, puis saisir les résultats:

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

Sinon, il suffit de tirer les tâches pour commencer, et attendre chacun séparément. Notez que les tâches de TAP sont « chauds » - ils commencent dès leur création, pas lorsque vous les attendez. Donc, cela fonctionnera aussi - mais cette fois si t1 jette une exception, il pas attendre t2 et t3 à compléter:

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

J'ai blogué à ce sujet, d'abord sur attente pour des tâches multiples en général puis sur les exceptions lors de l'attente pour les tâches multiples .

Autres conseils

Si vous voulez savoir sur les plans de l'équipe de WCF pour soutenir le modèle async / Attendent, jetez un oeil au blog suivant:

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

Amadeo

Voir Async CTP - Comment puis-je utiliser async / vous attendent pour appeler un service WCF
? des exemples sur les clients async et services. Ou utiliser AsyncWcfLib , il prend en charge un modèle Acteur programmation basé et a des exemples de services d'appels d'autres services à l'intérieur d'une application ou sur le réseau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top