我正在开发一个 Windows Phone 8.1 项目。 Windows 8.1 中有两个版本的 http 客户端 -system.net.http
and windows.web.http
。 Microsoft 建议使用后者。
所以,我决定接受它。但我找不到取消开始的网络请求的方法windows.web.http.httpclient
. In system.net.http.httpclient
有一个CancelPendingRequests http://msdn.microsoft.com/en-us/library/system.net.http.httpclient.cancelpendingrequests%28v=vs.118%29.aspx方法,但后面的选项不存在类似的方法。
那么,是否可以取消网络请求?如果可以,如何取消?
示例代码:
考虑一个Http Get
请求谷歌如下。
如果用户愿意的话,我想在完成之前取消它。
// 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);
如果不需要取消令牌,也可以直接取消 IAsyncOperation,如下所示:
var operation = _httpClient.GetStringAsync(new Uri("http://www.google.com"));
var response = await operation;
operation.Cancel();
This 博客文章 http://www.windows8tricks.net/2012/05/diving-deep-with-winrt-and-await/是关于整个任务与 IAsyncOperation 主题的好读物。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)