我正在开发一个Windows Phone 8.1项目。在Windows 8.1中有两个版本的http client -
因此,我决定采用它。但是我找不到一种方法来取消使用
那么,是否可以取消网络请求,如果可以,怎么做?
示例代码:
考虑以下以Google为目标的
system.net.http
和windows.web.http
。Microsoft建议使用后者。因此,我决定采用它。但是我找不到一种方法来取消使用
windows.web.http.httpclient
启动的网络请求。在system.net.http.httpclient
中,存在一个CancelPendingRequests
方法,但后者选项没有类似的方法。那么,是否可以取消网络请求,如果可以,怎么做?
示例代码:
考虑以下以Google为目标的
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。
另外,我尝试在请求正在进行时(例如GetStringAsync)对HttpClient调用Dispose()。 但是,仍然没有抛出任何异常,也没有取消该请求;GetStringAsync将正常完成并显示正确的结果。