我有一个Web服务产生随机错误,我想我找到了错误。处理并发读取/写入文件
基本上,它是读取一个配置文件,如下所示,然后装入一个如下:
var config = File.ReadAllText(filename);
xmlDoc.Load(config);
然而,在稍后的时间(可能是第二版本)的配置值中的一个被更新和文件保存
xmlDoc.Save(filename);
所以,现在我遇到了更多的错误(不幸的是,原开发商增加了一个空try块,所以我不能检查刚才)第一次读操作过程中,我认为这是因为它试图读取文件就像从IIS产生的另一个进程在.Save中一样一部分。我不知道File.ReadAllText是如何工作的以及它是否会在写入锁定文件时失败。
什么是解决这个问题的最佳解决方案,以确保阅读始终有效?正在写入的值只是一个计数器,如果失败,它将被忽略,因为它并不重要,但宁愿写入它。我想我可以把它放到一个单独的配置文件中,并与错误一起生活,但我宁愿它只是一个文件。
谢谢。
对一个静态对象使用lock()以确保只有一个线程可以同时访问该文件。 – Gusman
谢谢。这是否是在我的IIS Web服务中执行它的标准方式,假设许多进程想要同时连续读取和写入?顺便说一句,我是否正确地写了锁定读取? –
@gusman OP认为读取来自不同的进程而不是不同的线程,所以它需要一个互斥锁而不是锁 –