Я загружаю изображение с HttpClient.PostAsync()
на моем приложении Windows Phone 8. Пользователь имеет возможность отменить эту загрузку с помощью кнопки пользовательского интерфейса.Отмена запроса POST «HttpClient»
Чтобы отменить запрос POST, я установил CancellationToken
. Но это не работает. После запроса на отмену я вижу, что загрузка происходит в моем прокси, и очевидно, что запрос был проигнорирован. Мой код:
using (var content = new MultipartFormDataContent())
{
var file = new StreamContent(stream);
file .Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
FileName = "filename.jpg",
};
file.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
content.Add(file);
await httpclient.PostAsync(new Uri("myurl", UriKind.Absolute), content,
cancellationToken);
}
Пожалуйста, обратите внимание, что у меня есть CancellationTokenSource
для CancellationToken
. После того, как пользователь нажимает кнопку «Отмена», вызывается tokensource.Cancel()
. Кроме того, изображения в моей тестовой папке составляют от 1 до 2 МБ (не так уж и много).
Итак, есть способ отменить запрос POST HttpClient
?
От [этот ответ] (http://stackoverflow.com/a/29587505/1497596): * «Нет гарантии, что отмена« CancelationTokenSource »отменяет базовую операцию. Это зависит от реализации базовой операции (в данном случае метода« SendAsync »). Операция может быть отменена немедленно или через несколько секунд или никогда ». * Итак, на основании этого, похоже, что после выполнения запроса' PostAsync() 'вам может потребоваться проверить' cancelationToke n.IsCancellationRequested', и если true, вызовите 'DeleteAsync()' для загруженного изображения. – DavidRR
Хотя вы указали [windows-phone-8] (http://stackoverflow.com/tags/windows-phone-8/info), вы * не указали, используете ли вы [Windows.Web.Http.HttpClient ] (https://msdn.microsoft.com/en-us/library/windows/apps/windows.web.http.httpclient.aspx) или [System.Net.Http.HttpClient] (https://msdn.microsoft .com/EN-US/библиотека/system.net.http.httpclient% 28В = vs.118% 29.aspx). (Исходя из параметров, предоставленных вашему вызову 'PostAsync()', он * появляется * как последний.) – DavidRR
Связанный: [Правильно отменять или отменить PostAsync] (http://stackoverflow.com/q/23920754/1497596) – DavidRR