Tôi có một thành phần đang xử lý nhiều yêu cầu web trên từng chuỗi riêng biệt. Mỗi xử lý WebRequest là đồng bộ.Cách tiếp cận tốt hơn trong quản lý nhiều WebRequest
public class WebRequestProcessor:System.ComponentModel.Component
{
List<Worker> tlist = new List<Worker>();
public void Start()
{
foreach(string url in urlList){
// Create the thread object. This does not start the thread.
Worker workerObject = new Worker();
Thread workerThread = new Thread(workerObject.DoWork);
// Start the worker thread.
workerThread.Start(url);
tlist.Add(workerThread);
}
}
}
public class Worker
{
// This method will be called when the thread is started.
public void DoWork(string url)
{
// prepare the web page we will be asking for
HttpWebRequest request = (HttpWebRequest)
WebRequest.Create(url);
// execute the request
HttpWebResponse response = (HttpWebResponse)
request.GetResponse();
// we will read data via the response stream
Stream resStream = response.GetResponseStream();
// process stream
}
}
Bây giờ tôi phải tìm cách tối ưu cách hủy tất cả yêu cầu.
Một cách là chuyển đổi mỗi WebRequest đồng bộ thành không đồng bộ và sử dụng WebRequest.Abort để hủy xử lý.
Cách khác là giải phóng con trỏ chuỗi và cho phép tất cả các chuỗi chết bằng cách sử dụng GC.
“cho phép tất cả các chủ đề để chết sử dụng GC”. Đó không phải là cách hoạt động của luồng. Ngay cả khi không có tham chiếu đến 'Thread' mà bạn đã tạo, luồng vẫn đang chạy. – svick
Câu hỏi là gì? – svick
có họ sẽ chết sau khi hoàn thành xử lý, trong trường hợp của tôi là lên đến 20 giây – walter