当前位置: 首页 > 编程语言 > C#

C#学习教程:.NET2.0-File.AppendAllText(...)-线程安全实现分享

时间:2023-04-10 23:42:20 C#

.NET2.0:File.AppendAllText(...)-线程安全实现简单日志记录类:内部静态类日志记录{privatestaticobjectthreadlock;静态日志记录(){threadlock=newobject();}internalstaticvoidWriteLog(stringmessage){try{lock(threadlock){File.AppendAllText(@"C:logfile.log",message);}}catch{...handleloggingerrors...}}}锁需要围绕File.AppendAllText(...)还是方法本身通过其自己的实现实现线程安全?搜索这方面的信息会产生很多相互矛盾的信息,有的说是,有的说不是。MSDN什么也没说。File.AppendAllText将获取日志文件上的独占写入锁,这将导致任何试图访问该文件的并发线程抛出异常。所以是的,您需要一个静态锁对象来防止多个线程同时尝试写入日志文件并抛出IOException。如果这会成为一个问题,我真的建议将日志记录到数据库表,这将更好地处理并发日志编写器。或者,您可以使用线程安全的TextWriterTraceListener(好吧,它会为您锁定;我宁愿尽可能少地编写自己的多线程代码)。测试并行写入表明,如果您要注释掉lock语句,您将得到System.IO.IOException。[测试]publicvoidAnswer_Question(){varex=Assert.Throws(()=>Parallel.Invoke(()=>Logging.WriteLog("abc"),()=>Logging.WriteLog("123")));//System.IO.IOException:该进程无法访问文件“C:Logsthread-safety-test.txt”,因为它正被另一个进程使用。控制台.写(前);它是线程安全的,因为它使用读取共享来打开文件,假设您的文件系统尊重文件锁,一次只允许一个线程写入文件。但是,如果其他线程尝试读取同一个文件,则可能会发生脏读。以上就是C#学习教程:.NET2.0:File.AppendAllText(...)–线程安全实现分享的全部内容,如果对你有用还需要详细了解C#学习教程,希望各位多多留意——本文来自网络合集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: