首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取消'HttpClient‘POST请求

问取消'HttpClient‘POST请求
EN

Stack Overflow用户
提问于 2015-07-17 16:20:39
回答 2查看 5.6K关注 0票数 5

我正在使用HttpClient.PostAsync()在我的Windows phone8应用上载图像。用户可以选择通过UI按钮取消此上传。

要取消POST请求,我设置了一个CancellationToken。但这不管用。在取消请求之后,我仍然看到上传发生在我的代理中,很明显,该请求被忽略了。我的代码:

代码语言:javascript
复制
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);
}

还请注意,我有一个用于CancellationToken的CancellationTokenSource。用户单击Cancel按钮后,将调用tokensource.Cancel()。此外,我测试用例中的图像大小为1到2MB(不是那么大)。

那么,有没有办法取消HttpClient POST请求呢?

EN

回答 2

Stack Overflow用户

发布于 2017-11-20 21:43:08

代码语言:javascript
复制
   try
   {
          var client = new HttpClient();

          var cts = new CancellationTokenSource();
          cts.CancelAfter(3000); // 3seconds

          var request = new HttpRequestMessage();

          await client.PostAsync(url, content, cts.Token);

  }
  catch(OperationCanceledException ex)
  {
          // timeout has been hit
  }
票数 4
EN

Stack Overflow用户

发布于 2015-07-17 21:27:12

取消任务并不会立即终止它。在执行工作之前,您必须通过检查令牌的状态进行手动检查:

代码语言:javascript
复制
if (ct.IsCancellationRequested) 
{
    ct.ThrowIfCancellationRequested();
}

// Post request here...

这篇文章非常有用:How to: Cancel a Task and Its Children

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31471291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档