2012-04-01 7 views
0

Es gibt einen Code, der eine Datei liest und einige Rechenoperationen mit ihrem Inhalt in einem anderen Thread durchführt, der die Klassen Task und StreamReader verwendet.Klassenaufgabe in C# und die verschiedenen Ergebnisse

Task t= new Task(() => DoSomeWork(myFile)); 
t.Start(); 

Aber trotz der Datei ist unveränderlich manchmal erhalte ich die verschiedenen Ergebnisse! Warum? Was soll ich tun, um es zu lösen?

+0

Sie müssen wirklich mehr Details über die Implementierung von DoSomeWork liefern, damit wir Ihnen helfen können. –

+1

Wenn Sie auch erklären können, wie die Ergebnisse jedes Mal "anders" sind, würde dies dazu beitragen, dass das Problem leichter lokalisiert werden kann. –

+0

Manchmal wird das unterschiedliche Ergebnis in der Spalte "Häufigkeit" für das angegebene Wort angezeigt. –

Antwort

2

Sie haben eindeutig etwas in DoSomeWork(), das nicht threadsicher ist. Der wahrscheinlichste Kandidat hierfür ist ein statischer Code, da dies bedeutet, dass nur eine Kopie dieses bestimmten Codeabschnitts im Speicher vorhanden ist. Eine Instanz von DoSomeWork() könnte den Kontext ausschalten, und eine andere Instanz würde dann den Status der statischen Methode aufgreifen und Ihnen einige unvorhersehbare Ergebnisse liefern. Andere Dinge könnten unsachgemäße Verwendung der Abhängigkeitsinjektion, ein Singleton-Objekt, das geteilt wird, bestimmte Bibliotheken, die unkorrekt als asynchron verwendet werden, oder ein paar andere Dinge beinhalten - das ist es, worüber Drew sprach, als er nach mehr Informationen fragte.

1

Ein Problem, das ich aus der Fledermaus sehen kann, ist, wenn es mehrere Wort Übereinstimmungen gibt, das erste Mal, wenn Sie jedes neue Wort stoßen, erstellen Sie die gesamte GridView. Ich würde empfehlen, die GridView zu erstellen, bevor Sie die Schleife eingeben, um Wörter zu verarbeiten ... wenn die GridView nicht einfach in der ListView's-Definition zur Entwurfszeit statisch sein soll.

Das heißt, das ist eher ein Leistungsproblem (ständig die Ansicht zurückstellen) als ein Problem mit den Daten. Wenn Sie Ihre FileWordInfo Ansicht Modell Klassenimplementierung veröffentlichen können, enthüllen Sie möglicherweise einige andere Probleme.

Verwandte Themen