2012-05-17 17 views
2

으로 지정하면 웹 크롤러와 같은 종류의 프로그램을 만들 수 있습니다. 그것은 페이지의 html을 다운로드하고 regex를 사용하여 특정 텍스트를 파싱 한 다음 목록에 추가합니다.async http 요청을 C#

이렇게하려면 비동기 http 요청을 사용했습니다. GET 요청은 비동기 적으로 보내지고 파싱 작업은 반환 된 HTML에서 수행됩니다.

내 문제이며, 프로그램이 원활하게 실행되지 않는다는 것이 단순 할 지 모르겠습니다. (예 : 카운터가 항목이 추가 될 때마다 한 번씩 증가하도록 프로그래밍되었지만) 한 번에 여러 개의 요청을 보내고 한 번에 일시 중지 한 다음 항목을 한 번에 증분하여 예를 들어 항목이 53에서 69로 보여주는, 54,55,56, ...

미안하지만 나는이 모든 것을 가르쳐 주었고, 경험 많은 조언은 먼 길을 갈 것입니다.

감사합니다.

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – SLaks

+0

이것은 결과 HTML이 항상 존재하는 특정 사이트를위한 것입니다. regex가 잘 작동하도록 변수를 변경하는 것과 같은 형식. – blizz

+0

호기심에서 벗어나보다 효율적인 방법으로 다른 방법이 있습니까? – blizz

답변

4

소리가 맞습니다.

작업 중 가장 느린 부분은 네트워크를 통해 페이지를 다운로드하는 것입니다.

프로그램이 여러 페이지를 한 번에 다운로드하고 도착하기를 기다린 다음 거의 즉시 구문 분석합니다.

+0

, 어떻게 든 주 스레드에 우선 순위를 부여 할 수 있습니까? 즉 비동기 요청을 ThreadPool에 대기중인 스레드입니까? 20 개의 비동기 요청이있을 때마다 주 스레드도 요청을하기 때문에이 작업이 필요합니다. 그래서 일어난 일은 이미 대기중인 모든 ThreadPool 요청 뒤에 백 로그되고 그 응답을 기다리는 전체 프로그램을 차단하는 것입니다. – blizz

+0

@ user1115071 : 이미이 용도로 최적화 된 TPL 사용을 고려하십시오. – SLaks

+0

TPL을 한번도 사용하지 않았기 때문에 내 무지를 용서해주십시오. 모든 스레드에 대해 사용해야합니까, 아니면 언급 한 주요 스레드에 대해서만 사용해야합니까? – blizz

관련 문제