У меня есть компонент, который обрабатывает несколько веб-запросов, каждый в отдельном потоке. Каждая обработка 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
}
}
Теперь мне нужно найти оптимальный способ отмены всех запросов.
Один из способов - преобразовать каждый синхронный WebRequest в асинхронный и использовать WebRequest.Abort для отмены обработки.
Другой способ - освободить указатели потоков и позволить всем потокам умереть с помощью GC.