2016-08-08 53 views
0

Ich habe WCF Async Ende Muster zu einer Service-Funktion zu starten. Ich habe die Begin-Funktion in einer Aufgabe verpackt. Wenn auf eine Aufgabe gewartet wird, wartet sie nicht auf die Beendigung der Rückruffunktion, die an die Begin-Funktion übergeben wird. Wie kann ich dafür sorgen, dass die Callback-Funktion beendet wird? Vielen Dank.Wie wird eine Task auf die asynchrone Rückruffunktion von WCF gewartet?

Hier ist was ich habe.

+0

Visual Studio 2013+ (ich denke auch 2012) kann Proxies generieren, die * Tasks * anstelle von Begin/End-Methoden verwenden. Die einfachste Lösung wäre vielleicht, den Proxy neu zu erstellen, um aufgabenbasierte Methoden zu generieren. –

Antwort

1

StartNew ist eine gefährliche API und sollte nicht verwendet werden. In deinem Fall brauchst du es sowieso nicht.

Anstatt explizit Begin*/End* aufzurufen, können Sie Task.Factory.FromAsync verwenden, um sie einzupacken. Mein VB ist rostig, aber der C# Code würde wie folgt aussehen:

CaseResponse tCaseResponse = await Task.Factory.FromAsync(client.BeginCaseProcess, 
    clientEndCaseProcess, pCase, null); 

Weitere Informationen finden Sie TAP wrappers for APM.

+1

Vielleicht wäre es eine einfachere Lösung, den WCF-Proxy neu zu erstellen. VS 2013+ (zumindest) generieren aufgabenbasierte Proxies –

+0

@ PanagiotisKanavos: Ausgezeichneter Punkt - Ich habe das vergessen! –

+0

Derzeit wurde das Projekt auf .NET Framework 4.0 festgelegt. Ist es möglich, den WCF-Proxy neu zu erstellen, um aufgabenbasierte Vorgänge mit .NET Framework 4.0 zu generieren? Vielen Dank. – Jyina