Tôi đang gặp sự cố khi tìm hiểu cách hủy tác vụ này trong C#. Tôi không chính xác có một sự hiểu biết mạnh mẽ về xử lý các chủ đề và tôi đã cố gắng Googling cho một số ví dụ mã đơn giản để giúp tôi ra nhưng tôi đã nhận được thực sự không có nơi. Đây là đoạn mã tôi đang làm việc:Hủy tác vụ truy xuất URL không đồng bộ
var tasks = urls.Select(url => Task.Factory.StartNew(
state =>
{
using (var client = new WebClient())
{
lock (this)
{
// code to download stuff from URL
}
}
}, url)).ToArray();
try
{
Task.WaitAll(tasks);
}
catch (Exception e)
{
textBox2.AppendText("Error: " + e.ToString());
}
Trong đó "url" là một mảng URL. Có một cách đơn giản để làm cho nó để, khi tôi nhấp vào một nút trong chương trình của tôi, việc tải xuống các URL được dừng lại hoàn toàn? Ngoài ra, đoạn mã tôi đã dán nằm trong một hàm mà các cuộc gọi backgroundWorker1, mà tôi cho rằng có thể làm cho mọi thứ trở nên phức tạp hơn một chút. (Lý do tại sao tôi có một backgroundWorker là như vậy giao diện người dùng không bị khóa trong khi nó đang tải xuống các URL.)
Nếu có bất kỳ cách nào gây nhầm lẫn, đây là một phác thảo về những gì tôi đã cố gắng đạt được với mã:
- Tôi có một loạt URL, tôi muốn tải xuống mọi URL không đồng bộ mà không cần khóa giao diện người dùng.
- Tôi muốn người dùng dừng chương trình tải xuống URL bằng cách nhấp vào nút, khá nhiều khi hủy chuỗi.
- Khi người dùng nhấp vào nút một lần nữa, chương trình sẽ tải lại tất cả các URL từ mảng đó.
Xin cảm ơn trước.
Vui lòng không bao gồm các thẻ trong tiêu đề câu hỏi của bạn; nó chỉ làm việc nhiều hơn cho những người trong chúng ta quan tâm đến tính nhất quán trên SO. –