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
abzieltIch 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.
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
.
Verwendung:
%Vor% 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:
[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.
Tags und Links .net c# async-await xamarin dotnet-httpclient