Parallel.ForEach不会启动新线程
大家好,我们编写了一个使用Microsoft的Parallel Extensions for the .NET Framework中的Parallel.ForEach进行IO密集型操作的程序。我们需要删除大量文件,并将要删除的文件表示为列表嵌套列表。每个嵌套列表中有1000条消息,我们有50个这样的列表。问题在于,当我查看日志时,我只看到一个线程在我们的Parallel.ForEach块内执行。
以下是代码示例:
List<List<Message>> expiredMessagesLists = GetNestedListOfMessages();
foreach (List<Message> subList in expiredMessagesLists)
{
Parallel.ForEach(subList, msg =>
{
try
{
Logger.LogEvent(TraceEventType.Information, "Purging Message {0} on Thread {1}", msg.MessageID, msg.ExtensionID, Thread.CurrentThread.Name);
DeleteMessageFiles(msg);
}
catch (Exception ex)
{
Logger.LogException(TraceEventType.Error, ex);
}
});
}
我用更简单的数据结构和没有IO逻辑的示例代码编写了一些代码,并可以看到在Parallel.ForEach块内执行了几个不同的线程。我们在上面的代码中使用Parallel.ForEach有什么不正确的地方吗?它可能是列表中的列表出了问题,或者IO操作存在某种线程限制。