6

Tôi đang làm việc trên dự án Windows Phone 8.1. Có hai phiên bản ứng dụng khách http trong Windows 8.1 - system.net.httpwindows.web.http. Microsoft khuyên bạn nên sử dụng sau này.http yêu cầu hủy khách hàng trong các cửa sổ 8.1

Vì vậy, tôi quyết định đi với nó. Nhưng tôi không thể tìm thấy cách để hủy yêu cầu web bắt đầu bằng windows.web.http.httpclient. Trong system.net.http.httpclient có phương thức CancelPendingRequests nhưng không tồn tại phương pháp tương tự cho tùy chọn sau.

Vì vậy, có thể hủy yêu cầu web và nếu có thì làm cách nào?

Mã mẫu:

Xem xét yêu cầu Http Get yêu cầu google như sau. Tôi muốn hủy trước khi hoàn thành nếu người dùng muốn.

// 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); 
    } 
} 

Không có phương pháp hỗ trợ HttpClient CancellationToken.

Ngoài ra, tôi đã cố gắng gọi Dispose() trên HttpClient trong khi yêu cầu đang diễn ra (nói GetStringAsync). Tuy nhiên vẫn không có ngoại lệ nào được ném cũng như yêu cầu bị hủy; GetStringAsync hoàn thành như bình thường và hiển thị kết quả chính xác.

+0

Đăng mã của bạn .... –

Trả lời

8

đã không kiểm tra nó, nhưng điều này có thể làm việc:

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

Nếu bạn không có nhu cầu về thẻ hủy, bạn cũng có thể hủy IAsyncOperation trực tiếp như thế này:

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

operation.Cancel(); 

blog post này được đọc tốt trên toàn bộ chủ đề Nhiệm vụ so với IAsyncOperation.

+2

Có tính năng này hoạt động. Thực ra hôm nay tôi cũng đã xem xét mẫu lưu trữ trên MSDN nhanh chóng sử dụng cùng cách tiếp cận. Tham khảo: http: //code.msdn.microsoft.com/wpapps/HttpClient-sample-55700664 –

Các vấn đề liên quan