각각 별도의 스레드에서 여러 웹 요청을 처리하는 구성 요소가 있습니다. 각 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를 사용하여 죽는 것을 허용하는 것입니다.
에 의해 언급으로 죽이는 응용 프로그램 도메인을 산란 고려하는 것입니다. 그것은 쓰레드가 동작하는 방식이 아닙니다. 생성 한'Thread'에 대한 참조가 없더라도 스레드는 여전히 실행 중입니다. – svick
무엇이 문제입니까? – svick
예 완료 처리 후 죽을 것입니다. 제 경우 최대 20 초입니다. – walter