使用TextWriter.多线程文件IO的同步或锁.c# WPF .net 4.5
本文关键字:WPF net 同步 多线程 TextWriter 文件 IO 使用 | 更新日期: 2023-09-27 18:17:43
在多线程系统中有两种向文件写入文本的方法
哪一个比另一个好
第一种情况:使用静态对象锁定流写入器并执行操作
第二种情况:
TextWriter twWaitingToBeFetched;
twWaitingToBeFetched = TextWriter.Synchronized(new StreamWriter(stringPath, true));
twWaitingToBeFetched.WriteLine(srNewComposedUrl);
twWaitingToBeFetched.Flush();
现在你认为哪一个更好,为什么?
我需要多个线程任务来写相同的流
c# .net 4.5 - WPF应用程序如果你使用第二个变量锁定是隐式的和隐藏的。调用代码并不知道锁的任何信息。事实上,它可能错误地认为对WriteLine
的两个调用是原子的,并且将一个接一个地出现在输出中。
使用显式锁定,这样可以更好地控制哪些操作看起来是原子操作。
TextWriter twWaitingToBeFetched;
twWaitingToBeFetched = TextWriter.Synchronized(new StreamWriter(stringPath, true));
twWaitingToBeFetched.WriteLine(srNewComposedUrl);
twWaitingToBeFetched.Flush();
这不会同步任何东西,因为每个WriteLine
都被分派到一个新的、独立的同步写入器上。您还需要适当地处置对象,而不是不必要地调用Flush
。