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?

War es hilfreich?

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:

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

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

scroll top