Ich habe eine Methode, die eine Textdatei liest, die einen int-Wert pro Zeile enthält, um das Lesen schneller zu machen, verwendete ich Parallel.ForEach
, aber das Verhalten, was ich sehe, ist unerwartet, ich habe 800 Zeilen die Datei, aber wenn ich diese Methode ausführen, jedes Mal, wenn es verschiedene Anzahl von HashSet zurückgibt, was ich nach der Suche gelesen habe, ist Parallel.ForEach
spawns mehrere Threads und es gibt das Ergebnis zurück, wenn alle Threads ihre Arbeit abgeschlossen haben, aber mein Code ausführen widerspricht, oder ich fehlt etwas Wichtiges hier?Parallel.ForEach zurückkehrendes inkonsistentes Ergebnis
Hier ist meine Methode:
private HashSet<int> GetKeyItemsProcessed()
{
HashSet<int> keyItems = new HashSet<int>();
if (!File.Exists(TrackingFilePath))
return keyItems;
// normal foreach works fine
//foreach(var keyItem in File.ReadAllLines(TrackingFilePath))
//{
// keyItems.Add(int.Parse(keyItem));
//}
// this does not return right number of hashset rows
Parallel.ForEach(File.ReadAllLines(TrackingFilePath).AsParallel(), keyItem =>
{
keyItems.Add(int.Parse(keyItem));
});
return keyItems;
}
Ich kann wetten, das ist nicht "C". –
Es war ein Fehler –
Ändern eines 'HashSet' [ist nicht Thread-sicher] (https://msdn.microsoft.com/en-us/library/bb359438 (v = vs.110) .aspx # Anchor_10). Warum verwenden Sie keine Concurent-Sammlungen wie ConcurrenDictionary oder ConcurrentQueue? –