Tôi tạo một ví dụ mẫu để gọi liên kết bằng cách sử dụng WebClient bằng cách sử dụng async và đang chờ phương pháp bây giờ tôi muốn đính kèm hủy bỏ chức năng gọi async cũng. Nhưng tôi không thể nhận mã thông báo CancellationTokenSource và đính kèm DownloadStringTaskAsync vào mã thông báo hủy này. Sau đây là mã của tôi bất cứ ai có thể cho tôi biết làm thế nào để thực hiện điều này.Cách đính kèm CancellationTokenSource vào phương thức DownloadStringTaskAsync và hủy cuộc gọi không đồng bộ?
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.");
}
Khi nút Hủy của tôi gọi cts.Cancel cuộc gọi DownloadStringTaskAsync không bị hủy. Tại sao nút hủy không thể hủy cuộc gọi Async?
Bạn không sử dụng 'cái CancellationTokeSource' trong bất kỳ cách nào, làm thế nào là' WebClient' phải biết nó nên hủy bỏ khi bạn không nói với nó rằng ? – svick
Cảm ơn svick đã trả lời của bạn. Nhưng tôi đã cố gắng để vượt qua các mã thông báo như là một tham số của phương pháp DownloadStringTaskAsync nhưng không có quá tải cho phương pháp này hỗ trợ nó. Do đó, tôi không nhận được cách sử dụng mã thông báo Cancellation với phương thức DownloadStringTaskAsync. Bạn có thể gợi ý cho tôi một số cuốn sách hay để đọc tất cả các bản cập nhật mới này trong C# với các khả năng TAP không. –