appel async autres services WCF service WCF
-
28-09-2019 - |
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?
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:
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.