[英]Using TextWriter.Synchronized or having lock in multithreaded file IO - C# WPF .net 4.5
好的,有两种方法可以在多线程系统中将文本写入文件
哪一个比其他更好
第一种情况:拥有一个静态对象来锁定streamwriter并进行操作
第二种情况:
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
都是在一个新的独立同步WriteLine
器上调度的。 您还需要正确处理对象,而不是不必要地调用Flush
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.