首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >windows 8.1中的http客户端取消请求

windows 8.1中的http客户端取消请求
EN

Stack Overflow用户
提问于 2014-05-04 15:08:48
回答 1查看 2.5K关注 0票数 6

我正在做一个Windows 8.1项目。Windows8.1中有两个版本的http客户端- system.net.httpwindows.web.http。Microsoft建议使用后者。

所以,我决定跟它一起去。但我无法找到一种方法来取消从windows.web.http.httpclient开始的网络请求。在system.net.http.httpclient中有一个CancelPendingRequests方法,但后面的选项不存在类似的方法。

那么,是否有可能取消网络请求,如果可以的话,如何取消?

样本代码:

考虑谷歌的Http Get请求,如下所示。如果用户愿意,我想在它完成之前取消它。

代码语言:javascript
复制
// Windows Phone 8.1 project (not silverlight)
public sealed partial class MainPage : Page
{
    Windows.Web.Http.HttpClient client = new Windows.Web.Http.HttpClient();

    public MainPage()
    {
        this.InitializeComponent();

        this.NavigationCacheMode = NavigationCacheMode.Required;

        Windows.Phone.UI.Input.HardwareButtons.BackPressed += (s, e) =>
        {
           CancelGet();
        }
    }

    private void CancelGet()
    {
       // What to put here??
       // tried client.Dispose();
       // but still get request completes successfully
    }

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        string res = await client.GetStringAsync(new Uri("http://www.google.com", UriKind.Absolute));

        System.Diagnostics.Debug.WriteLine("result obtained\n" + res);
    }
 }

HttpClient的任何方法都不支持CancellationToken。

此外,在请求正在进行时,我尝试调用HttpClient上的Dispose() (比如GetStringAsync)。但是,仍然不会抛出任何异常,也不会取消请求;GetStringAsync将正常完成并显示正确的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-06 07:03:42

还没有进行测试,但这可能有效:

代码语言:javascript
复制
await client.GetStringAsync(new Uri("http://www.google.com")).AsTask(cancellationToken);

如果您不需要取消令牌,也可以直接取消IAsyncOperation,如下所示:

代码语言:javascript
复制
var operation = _httpClient.GetStringAsync(new Uri("http://www.google.com"));
var response = await operation;

operation.Cancel();

这个blog post很好地阅读了整个Task主题。

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

https://stackoverflow.com/questions/23457797

复制
相关文章

相似问题

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