나는 앱 목록을 통해 반복하는 프로그램을 가지고 있습니다.여러 http 요청 - 응답으로 작업
Apps
--------
App1
App2
App3
이제 각각에 대해 각 응용 프로그램의 빌드 목록을 XML로 가져 오기 위해 http 요청을합니다.
그래서 요청 같은
http://example.com/getapplist.do?appid=App1
같은 나에게 응답을 제공
<appid name="App1">
<buildid BldName="Bld3" Status="Not Ready"></buildid>
<buildid BldName="Bld2" Status="Ready"></buildid>
<buildid BldName="Bld1" Status="Ready"></buildid>
</appid>
가 지금은
상태 "준비"으로
최고 빌드 번호를 가져온 다음 다른 웹을 예 : 전화 번호 :
http://example.com/getapplist.do?appid=App1&bldid=Bld2
이렇게하면 다음과 같은 응답이 표시됩니다.
<buildinfo appid="App1" buildid="Bld2" value="someinfo"></build>
이러한 정보는 내부 데이터 테이블에 제공됩니다. 그러나 이제는 2000 개의 appids가 있고 각 id마다 2 개의 웹 요청이 있기 때문에이 프로그램을 완료하는 데 오랜 시간이 걸립니다 (3 시간). BackgroundWorker을 지정하여 here으로이 문제를 정렬 해 보았습니다. http 응답의 모든 정보를 단일 XML로 조합 한 다음 추가 처리를 위해 해당 XML을 사용한다고 생각했습니다. 이
파일이
if (!backgroundWorker1.IsBusy) { for(int i = 0; i < appList.Count; i++) { BackgroundWorker bgw = new BackgroundWorker(); bgw.WorkerReportsProgress = true; bgw.WorkerSupportsCancellation = true; bgw.DoWork += new DoWorkEventHandler(bgw_DoWork); bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged); bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted); //Start The Worker bgw.RunWorkerAsync(); } }
,
그래서 내 코드의 모습을 다른 프로세스에서 사용되는 오류를 던졌습니다 그리고 DoWork
기능은 태그 값을 선택합니다 및 XML에 넣는다 .
모든 백그라운드 작업자의 모든 http 응답에서 app-buildinfo 세부 정보를 공통 파일로 가져올 수있는 가장 좋은 방법은 무엇입니까?
이 대신 한 BackgroundWorker에에서 webapi 비동기 전화 ... 그리고 잠금 이벤트 화재를 완료하고 XML 파일에 기록하여 WebRequest 비동기 중 하나를 사용하여 ... 좋지 않아 2000 backgroundworkers을 ... 생성합니다. – rene
'DoWork' 메소드 코드를 추가해 주시겠습니까? –
@rene 그래서 설정해야 할 한계는 무엇입니까? 또한, 5 명의 백그라운드 작업자라는 한계를 설정하면 모든 2K URL이 처리 될 때까지 스레드가 병렬로 실행된다는 의미입니까? – mhn