I un creare un esempio di esempio per chiamare il collegamento utilizzando WebClient utilizzando async e attendere il metodo ora voglio allegare anche la funzionalità di cancellazione delle chiamate asincrone. Ma non sono in grado di ottenere il token CancellationTokenSource e collegare DownloadStringTaskAsync a questo token di cancellazione. Seguendo è il mio codice qualcuno può dirmi come realizzare questo.Come allegare CancellationTokenSource al metodo DownloadStringTaskAsync e annullare la chiamata asincrona?
private async void DoWork()
{
this.Cursor = Cursors.WaitCursor;
Write("DoWork started.");
cts = new CancellationTokenSource();
WebClient wc = new WebClient();
string result = await wc.DownloadStringTaskAsync(new Uri("http://gyorgybalassy.wordpress.com"));
if (result.Length < 100000)
{
Write("The result is too small, download started from second URL.");
result = await wc.DownloadStringTaskAsync(new Uri("https://www.facebook.com/balassy"));
}
Write("Download completed. Downloaded bytes: " + result.Length.ToString());
Write("DoWork ended.");
this.Cursor = Cursors.Default;
}
private void btnCancel_Click(object sender, EventArgs e)
{
Write("Cancellation started.");
this.cts.Cancel();
Write("Cancellation ended.");
}
Quando il mio pulsante Annulla chiama cts.Cancel la chiamata DownloadStringTaskAsync non viene annullata. Perché il pulsante Annulla non è in grado di annullare le chiamate asincrone?
Non stai utilizzando la 'CancellationTokeSource' in alcun modo, come è il' WebClient' supposto sapere che dovrebbe annullare quando non dite che ? – svick
Grazie svick per la tua risposta. Ma ho provato a passare il token come parametro del metodo DownloadStringTaskAsync ma non c'è sovraccarico per questo metodo che lo supporta. Quindi non stavo ottenendo come utilizzare il token di cancellazione con il metodo DownloadStringTaskAsync. Puoi suggerirmi alcuni buoni libri per leggere tutti questi nuovi aggiornamenti in C# con le funzionalità di TAP. –