我創建了一個示例示例來使用WebClient使用異步和等待方法調用鏈接現在我想附加取消異步調用功能也。但是我無法獲取CancellationTokenSource標記並將DownloadStringTaskAsync附加到此取消標記。以下是我的代碼可以告訴我如何做到這一點。如何將CancellationTokenSource附加到DownloadStringTaskAsync方法並取消異步調用?
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.");
}
當我的取消按鈕調用cts.Cancel時,不會取消DownloadStringTaskAsync調用。爲什麼取消按鈕無法取消異步呼叫?
你不以任何方式使用'CancellationTokeSource',怎麼是'WebClient'應該知道它應該取消時,你不告訴它? – svick
謝謝你的回覆。但我試圖將該標記作爲DownloadStringTaskAsync方法的參數傳遞,但是對於支持它的此方法沒有重載。因此,我沒有得到如何使用DownloadStringTaskAsync方法取消令牌。你可以建議我一些好書,閱讀C#中的所有這些新的更新與TAP功能。 –