6

Sto lavorando a un progetto Windows Phone 8.1. Esistono due versioni del client http in Windows 8.1 - system.net.http e windows.web.http. Microsoft consiglia di utilizzare il successivo.richiesta di annullamento del client http in Windows 8.1

Quindi, ho deciso di andare con esso. Ma non riesco a trovare un modo per cancellare la richiesta web iniziata con windows.web.http.httpclient. In system.net.http.httpclient esiste un metodo CancelPendingRequests ma non esistono metodi simili per l'opzione successiva.

Quindi, è possibile annullare la richiesta web e, in caso affermativo, come?

codice di esempio:

consideri un Http Get richiesta di google come segue. Vorrei cancellarlo prima del suo completamento se l'utente lo desidera.

Nessuno dei metodi di supporto HttpClient CancellationToken.

Inoltre, ho provato a chiamare Dispose() su HttpClient mentre la richiesta è in corso (ad esempio GetStringAsync). Tuttavia, nessuna delle due eccezioni viene lanciata, né la richiesta viene cancellata; GetStringAsync viene completato normalmente e mostra il risultato corretto.

+0

Inserisci il tuo codice .... –

risposta

8

non hanno ancora testato, ma questo potrebbe funzionare:

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

Se non si ha la necessità per i token di cancellazione, è anche possibile annullare l'IAsyncOperation direttamente in questo modo:

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

operation.Cancel(); 

Questo blog post è una buona lettura sull'intero argomento Task vs IAsyncOperation.

+2

Sì, questo funziona. In realtà oggi ho anche guardato il campione ospitato su MSDN che usa rapidamente lo stesso approccio. Ref: http: //code.msdn.microsoft.com/wpapps/HttpClient-sample-55700664 –