Лучший подход к управлению несколькими WebRequest

У меня есть компонент, который обрабатывает несколько веб-запросов, каждый в отдельном потоке. Каждая обработка 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.

7
задан BoltClock 17 July 2011 в 00:09
поделиться