Parallel.ForEach nie obraca nowych wątków
Parallel.ForEach Not Spinning Up New Threads
Witam wszystkich, mamy bardzo intensywną operację, którą napisaliśmy przy użyciu Parallel.ForEach z Microsoft Parallel Extensions dla .NET Framework. Musimy usunąć dużą liczbę plików i reprezentujemy pliki do usunięcia jako listę list. Każda zagnieżdżona lista zawiera 1000 wiadomości i mamy 50 z tych list. Problem polega na tym, że gdy patrzę później na logi, widzę tylko jeden wątek wykonujący się wewnątrz naszego bloku Parallel.ForEach.
Oto jak wygląda kod:
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);
}
});
}
Napisałem przykładowy kod z prostszą strukturą danych i bez logiki IO, i widziałem kilka różnych wątków wykonujących się w bloku Parallel.ForEach. Czy robimy coś niepoprawnego z Parallel.ForEach w powyższym kodzie? Czy może to być lista list, która go wyzwala, czy też istnieje jakiś rodzaj ograniczeń wątków dla operacji we / wy?