Verwenden von TPL mit vorhandenen asynchronen APIs

8

Ich möchte TPL mit einer vorhandenen API verwenden, RestSharp, um spezifisch zu sein, also kann ich Fortsetzungen verwenden.

Aber das bedeutet, dass ich eine API umwandeln muss, die den klassischen .NET-Ansatz nicht asynchron verwendet, sondern Callbacks implementiert. Nimm einen Code wie diesen:

%Vor%

Hier möchte ich das ExecuteAsync in TPL einbinden, wenn es möglich ist. Aber ich kann nicht für das Leben von mir, herauszufinden, wie es geht.

Irgendwelche Ideen?

    
Claus Jørgensen 09.08.2011, 00:42
quelle

2 Antworten

12

TPL bietet TaskCompletionSource Klasse, mit der Sie so ziemlich alles als Aufgabe darstellen können. Durch Aufruf von SetResult oder SetException können Sie die Aufgabe erfolgreich oder fehlschlagen lassen. In Ihrem Beispiel könnten Sie wahrscheinlich Folgendes tun:

%Vor%

Sie können es dann verwenden:

%Vor%

Oder wenn Sie Aufgaben verketten möchten:

%Vor%

Sie können mehr über TaskCompletionSource in Ссылка

    
Bojan Resnik 09.08.2011, 01:49
quelle
1

Das war ein großer Schmerzpunkt für mich, als ich auch die TPL lernte.

Was Sie suchen, ist TaskCompletionSource . Wenn Sie TaskCompletionSource erstellen, wird ein spezielles Task -Objekt erstellt (zugänglich über die TaskCompletionSource.Task -Eigenschaft), das nur beim Aufruf der Methoden SetResult oder SetException für die zugehörige TaskCompletionSource abgeschlossen wird.

Dieser Beitrag erklärt , wie man APM-Operationen mit der TPL umschließt > (und auch Rx). Siehe auch diese Liste , die eine in die TPL eingepackte APM-Operation demonstriert.

    
bvanderveen 09.08.2011 16:30
quelle