我有一个线程,称之为“解析线程”。
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 仍然响应,但是应该继续在“解析线程”上运行的 RaiseDirectoryParsed 函数从未被调用。到目前为止,我已经调试了程序,并且对于在这种情况下该怎么做感到非常困惑。