gpt4 book ai didi

c# - Windows 8.1中的http客户端取消请求

转载 作者:太空狗 更新时间:2023-10-29 21:22:27 25 4
gpt4 key购买 nike

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

所以,我决定接受它。但是我找不到取消以 windows.web.http.httpclient 开始的网络请求的方法。在 system.net.http.httpclient 中有一个 CancelPendingRequests方法,但对于后一个选项不存在类似的方法。

那么,是否可以取消 Web 请求?如果可以,如何取消?

示例代码:

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

// 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 正常完成并显示正确的结果。

最佳答案

还没有测试过,但这可以工作:

await client.GetStringAsync(new Uri("http://www.google.com")).AsTask(cancellationToken);

如果不需要取消 token ,也可以像这样直接取消IAsyncOperation:

var operation = _httpClient.GetStringAsync(new Uri("http://www.google.com"));
var response = await operation;

operation.Cancel();

blog post是关于整个 Task vs IAsyncOperation 主题的好读物。

关于c# - Windows 8.1中的http客户端取消请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23457797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com