Ist File.ReadAllText Thread sicher?

7

Erstellt speziell einen Thread mit der TPL Task.Factory.StartNew :

%Vor%

Probleme verursachen usw.? Die Thread-Sicherheit scheint auf der MSDN-Ressource nicht erwähnt zu werden

Es befindet sich in einer SOAP-Webservice-Umgebung.

Ps Bitte, ich will nicht über die Vor- und Nachteile einer Aufgabe in einer Web-Umgebung wissen. Ich bin mir dieser Probleme bewusst, bitte , nimm es einfach als selbstverständlich hin, dass dieses Modell in meinem Fall gerechtfertigt ist, danke.

    
Liam 14.11.2013, 11:25
quelle

4 Antworten

12

Es ist in Ordnung - vorausgesetzt, es wird nicht gleichzeitig in die Datei geschrieben. In diesem Fall können Sie die Datei möglicherweise nicht öffnen (oder sehen teilweise Schreibvorgänge).

Gemäß der Dokumentation von File :

  

Alle öffentlichen statischen Member (Shared in Visual Basic) dieses Typs sind threadsicher. Alle Instanzmitglieder sind nicht garantiert threadsicher.

(Nicht dass es irgendwelche Instanzmethoden geben kann, da es sich um eine statische Klasse handelt ...)

    
Jon Skeet 14.11.2013, 11:28
quelle
7

Ja, das ist threadsicher an sich; Es unterliegt jedoch immer noch den üblichen Regeln des Dateisystems: Der gleichzeitige Zugriff auf die gleiche Datei hängt davon ab, welche Flags von den konkurrierenden Handles verwendet wurden. Wenn ein Handle es für exklusiven Zugriff markiert hat, wird es mit einer IO-bezogenen Ausnahme fehlschlagen.

    
Marc Gravell 14.11.2013 11:27
quelle
1

Es gibt tatsächlich keine "thread safe" -Funktion, ohne zu definieren, welche Operationen verwendet werden.

Wenn alle Threads (und Prozesse!) die Datei gerade lesen, ist das Lesen sicher. Wenn jedoch einige der Threads (oder andere Prozesse) in die Datei schreiben, erhalten Sie möglicherweise eine halbaktuelle Information, Sie wissen nie, wie das Schreiben organisiert ist.

Für einen ausfallsichereren Zugriff können Sie

verwenden %Vor%

Die Dokumentation für File.ReadAllText funktioniert nicht alles erklären und garantiert daher nichts über das Sperren.

    
Vlad 14.11.2013 11:38
quelle
0

Hier ist ein ähnlicher Weg wie Vlad vorgeschlagen. Ich verwende die FileShare-Option von Read, so dass andere Streams aus derselben Datei lesen können.

%Vor%     
Benjamin Suk 03.08.2017 06:55
quelle