How to attach CancellationTokenSource to DownloadStringTaskAsync method and cancel the async call?


Staff member
I an creating a sample example to call link using WebClient using async and await method now I want to attach cancel async call functionality also. But I am not able to get CancellationTokenSource token and attach DownloadStringTaskAsync to this cancellation token. Following Is my code can anyone tell me how to accomplish this.

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(""));

            if (result.Length < 100000)
                Write("The result is too small, download started from second URL.");
                result = await wc.DownloadStringTaskAsync(new Uri(""));
            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.");
            Write("Cancellation ended.");

When my Cancel button calls cts.Cancel the DownloadStringTaskAsync call is not canceled. Why cancel button is not able to cancel the Async calls?