このコードをデバッグでチェックしました。ファイルは実行時に存在し、文字列の内容には何らかのテキストがあります。TextWriterで自動的にフラッシュが同期していますか?
TextWriter.Synchronized(new StreamWriter(tmpOutput)).WriteLine(contents)
ただし、この行の実行後にファイルが空です。 Flushは自動的にSynchronizedで実行されますか? WriteLineの動作を妨げる何か他のものがありますか?
このコードをデバッグでチェックしました。ファイルは実行時に存在し、文字列の内容には何らかのテキストがあります。TextWriterで自動的にフラッシュが同期していますか?
TextWriter.Synchronized(new StreamWriter(tmpOutput)).WriteLine(contents)
ただし、この行の実行後にファイルが空です。 Flushは自動的にSynchronizedで実行されますか? WriteLineの動作を妨げる何か他のものがありますか?
いいえ、すべてのメソッドの後に自動Flush
コールはありません。
TextWriter.Synchronized
は、スレッドの安全性を保証します。つまり、複数のスレッドが同時にインスタンスを呼び出すことを防ぐことができます。その上に追加の保証はありません。
各操作後に変更をコミットすると、ライターのパフォーマンスが大幅に低下することに注意してください。
あなたは、コードがどのように実装されるか明確にする必要がある場合 - ソースを見て - すべてのメソッドがMethodImplOptions.Synchronized
とライターに渡されたコールに、単純なラッパーであることをhttps://referencesource.microsoft.com/#mscorlib/system/io/textwriter.cs,9e3dd0323cf4ee8b、観察者は、スレッドの安全性を提供するために追加:
[MethodImplAttribute(MethodImplOptions.Synchronized)]
public override void Write(char value) {
_out.Write(value);
}
私が良くありませんでしたこれで運がいいです: '(TextWriter tw =新しいStreamWriter(tmpOutput)){ tw.WriteLine(contents); } ' –