Parallel.ForEach를 사용하여 고유 한 시간 초과 스레드를 생성하려고 시도하는 Windows 서비스에서 작업하고 있습니다. 문제는 VS에서 몇 시간 동안 코드를 혼자 두거나 몇 시간 동안 서비스를 중지하고 백업을 시작하면 초기 시작 코드가 두 번 실행된다는 것입니다. 다음은 서비스의 OnStart가 호출하는 고정 보이드의 스 니펫입니다.코드가 실행되지 않은 경우에만 Parallel.ForEach가 시작시 두 번 실행됩니까?
Parallel.ForEach(urls, url =>
{
PageGrabber pagegrab = new PageGrabber(url);
if (url.Type.ToLower() == "http")
{
pagegrab.Elapsed += (obj, e) =>
{
pagegrab.CheckNormal();
};
pagegrab.CheckNormal();
}
else
{
pagegrab.Elapsed += (obj, e) =>
{
pagegrab.CheckXML();
};
pagegrab.CheckXML();
}
}
);
이 코드는 스레드를 직접 사용하면 좋지만 정말이 코드를 조금 업데이트하고 싶습니다. 중복 실행은 즉시 발생합니다. PageGrabber 객체는 WebClient를 사용하여 단순히 HTML 또는 XML을 문자열로 다운로드하는 것만 큼 간단합니다. 꽤 지루합니다.
게시 한 코드의 어느 부분이 "초기 시작 코드"입니까? 아니면 다른 곳입니까? – svick
누락 된 부분은 URL이 들어있는 텍스트 파일을 읽고 "url"개체를 만드는 부분입니다. try catch 블록에 있습니다. URL을 가져 와서 URL 객체를 만들고 URL 형식 목록에 추가 한 다음 foreach 루프를 추가합니다. 그것은 정말 기본입니다. 약 6 시간 동안 아무 것도 건드리지 않으면 단지 디버그하기가 어렵습니다. – kpcrash
중복 실행은 다중 (거의) 동시 스레드의 요청에 대한 응답으로 발생합니까? 또는 단일 요청에 대한 응답으로 통제 된 환경에서 발생합니까? 즉, 둘러싼 메소드가 2x 호출되지 않았습니까? 귀하의 문제를 일으키는 게시 된 코드에는 아무것도 표시되지 않습니다. –