WCF-Service-Aufruf asynchroner andere WCF-Dienste
-
28-09-2019 - |
Frage
Ich habe über das Task-basierte asynchrone Muster gelesen und es klingt großartig. Jetzt habe ich einen WCF-Dienst, dass der Bedarf andere WCF-Dienste zu nennen. Diese Leistungen zurück Differnet Ergebnis. Wie kann async diese Dienste mit dem neuen Muster rufen und warten auf alle vervollständigen?
Lösung
EDIT: Wenn Sie gerade BeginXXX und EndXXX Methoden erhalten, finden Sie unter diese Frage wie drehen -. und und der Rest meiner Antwort wird anwendbar sein
Grundsätzlich benötigen Sie TaskFactory<T>.FromAsync(...)
.
Sie können TaskEx.WhenAll
verwenden, die schließlich Task.WhenAll
sein wird.
Beachten Sie, dass dies für wartet alle die Aufgaben zu beenden, auch wenn es ein Fehler früh.
Da die Aufgaben verschiedene Ergebnistypen haben, werden Sie sie brauchen einzurichten, mit zu beginnen, warten sie alle bis zum Ende, dann die Ergebnisse greifen:
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
Alternativ nur die Aufgaben abfeuern, mit zu beginnen, und wartet jeweils getrennt ein. Beachten Sie, dass Aufgaben in TAP sind „heiß“ - sie beginnen, sobald sie erstellt wurden, nicht, wenn Sie auf sie warten. So wird dies auch funktionieren - aber dieses Mal, wenn t1
eine Ausnahme auslöst, es wird nicht Warten auf t2
und t3
komplett:
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
Ich habe darüber gebloggt, zuerst über für mehrere Aufgaben im allgemeinen warten und dann über Ausnahmen beim warten für mehrere Aufgaben .
Andere Tipps
Wenn Sie über die Pläne des WCF Team kennen die async / await Modell, werfen Sie einen Blick auf den folgenden Blog-Post zu unterstützen:
Amadeo
Siehe Async CTP - Wie kann ich async / await einen WCF-Dienst nennen
?
Beispiele für Asynchron-Kunden und Dienstleistungen.
Oder verwenden Sie AsyncWcfLib unterstützt es eine