스레드가 있는데이를 "구문 분석 스레드"라고합니다.다중 스레드 세션 후에 스레드가 재개되지 않습니다.
Thread parsingThread = new Thread(myMethod);
이 스레드에 대한 계산을 수행합니다.이 스레드는 마지막 병렬 처리가 더 많이 포함됩니다.
public void ReadCityFiles(BlockingCollection<GeonamesFileInfo> files)
{
Parallel.ForEach<GeonamesFileInfo>(
files.GetConsumingPartitioner<GeonamesFileInfo>(),
new ParallelOptions { MaxDegreeOfParallelism = _maxParallelism },
(inputFile, args) =>
{
RaiseFileParsing(inputFile);
using (var input = new System.IO.StreamReader(inputFile.FullName))
{
while (!input.EndOfStream)
{
RaiseEntryParsed(ParseCity(input.ReadLine()));
Interlocked.Increment(ref _parsedEntries);
}
}
RaiseFileParsed(inputFile);
});
RaiseDirectoryParsed(Directory);
}
문제는이 매우 길고 계산 비용 비동기 foreach는 작업 (~ 30 분) 완료되면, "구문 분석 스레드는"다시 시작하지 않습니다. 내 GUI는 여전히 반응하지만 "Parsing Thread"에서 계속 실행해야하는 RaiseDirectoryParsed 함수는 호출되지 않습니다. 지금까지이 프로그램을 디버깅했으며,이 상황에서해야 할 일에 대해 꽤 당황 스러웠습니다.
RaiseDirectoryParsed의 기능 및 "구문 분석 스레드"의 기능은 무엇입니까? – usr
'Parellel.ForEach' 작업 중 대부분이 제대로 종료되지 않습니다. 이것을 결정하기 위해 콘솔 메시지를 사용 했습니까? – Tudor
구문 분석 스레드가 처리하는 이벤트를 발생시킵니다. 어쨌든 실행되지 않습니다. parsing thread가 절대로 다시 시작하지 않는 것처럼 parallel.foreach 다음에 실행이 중지됩니다. –