Wie kopiert man HttpContent async und cancelable?

8

Ich verwende HttpClient.PostAsync() und die Antwort ist HttpResponseMessage . Seine Content-Eigenschaft hat den Typ HttpContent , der eine CopyToAsync() -Methode hat. Leider ist dies nicht kündbar. Gibt es eine Möglichkeit, die Antwort in eine Stream zu kopieren und eine CancellationToken ? Zu übergeben?

Ich bin nicht mit CopyToAsync() festgefahren! Wenn es einen Workaround gibt, wäre das in Ordnung. Lesen Sie ein paar Bytes, prüfen Sie, ob sie abgebrochen wurden, lesen Sie weiter und so weiter.

Die Methode HttpContent.CreateContentReadStreamAsync() sieht so aus, als wäre sie ein Kandidat. Leider ist es nicht mit meinem ausgewählten Profil verfügbar. Auch ist unklar, ob es alle Daten auf einmal lesen und viel Speicher verschwenden würde.

Hinweis: Ich verwende dies in einem PCL, der auf WP8, Windows Store 8, .NET 4.5, Xamarin.iOS und Xamarin.Android

abzielt     
Krumelur 03.01.2014, 11:22
quelle

3 Antworten

13

Ich glaube, das sollte funktionieren:

%Vor%

Beachten Sie, dass ReadAsStreamAsync Aufrufe von CreateContentReadStreamAsync aufruft, was für Streamantworten nur den zugrunde liegenden Inhaltsstream zurückgibt, ohne ihn in den Speicher zu puffern.

    
Stephen Cleary 03.01.2014, 13:04
quelle
2

Sie können einen nicht kündbaren Vorgang nicht abbrechen. Siehe Wie geht es? unkündbare asynchrone Vorgänge abbrechen? .

Sie können jedoch zulassen, dass sich der Codefluss verhält , als ob die zugrunde liegende Operation abgebrochen wurde, mit WithCancellation .

%Vor%

Verwendung:

%Vor%     
i3arnon 03.01.2014 11:30
quelle
1

HttpClient.CancelPendingRequests wird erwartet, dass alle ausstehenden Operationen abgebrochen werden. Ich habe jedoch nicht überprüft, ob das auch für CopyToAsync gilt. Fühlen Sie sich frei, es auszuprobieren:

%Vor%

[UPDATE] Überprüft: Leider wird% cco_de% nicht storniert. Ich behalte diese Antwort jedoch, da das Muster selbst nützlich sein kann, um andere Operationen auf HttpContent.CopyToAsync abzubrechen.

    
Noseratio 03.01.2014 12:42
quelle