2017-01-25 3 views
0

Ich habe diesen Code im Debug überprüft. Die Datei existiert, wenn sie ausgeführt wird, und der Inhalt der Zeichenfolge enthält Text.Spült automatisch in TextWriter synchronisiert?

 TextWriter.Synchronized(new StreamWriter(tmpOutput)).WriteLine(contents) 

Noch ist die Datei leer, nachdem diese Zeile ausgeführt wird. Wird Flush automatisch in Synchronized ausgeführt? Wäre da noch etwas anderes, das WriteLine daran hindert zu arbeiten?

Antwort

1

Nein, es gibt keinen automatischen Flush Aufruf nach jeder Methode.

TextWriter.Synchronized garantiert nur Thread-Sicherheit - das heißt, es wird verhindert, dass mehrere Threads parallel zur Instanz Aufrufe ausführen. Darüber hinaus gibt es keine zusätzlichen Garantien.

Beachten Sie, dass es die Leistung von Writer erheblich verringern würde, wenn es Änderungen nach jeder Operation festschreibt.

Wenn Sie klären müssen, wie Code implementiert ist - an der Quelle finden - https://referencesource.microsoft.com/#mscorlib/system/io/textwriter.cs,9e3dd0323cf4ee8b und Beobachter, dass alle Methoden sind einfach Wrapper mit MethodImplOptions.Synchronized in Writer übergeben nennen hinzugefügt Thread-Sicherheit zur Verfügung zu stellen:

[MethodImplAttribute(MethodImplOptions.Synchronized)] 
    public override void Write(char value) { 
      _out.Write(value); 
    } 
+0

Ich hatte besser Glück mit diesem: 'using (TextWriter tw = neuer StreamWriter (tmpOutput)) { tw.WriteLine (Inhalt); } ' –

Verwandte Themen