我使用以下内容清空txt文件:
System.IO.File.WriteAllText(path, string.Empty);
当我一次运行多个线程并且他们试图同时访问该文件时,问题就出现了。
关于轻松修复的任何想法? :)
答案 0 :(得分:1)
多线程救援!
您应该使用Monitor
,AutoResetEvent
或lock
块(实际上它是一个监视器),以便同步对整个文件的访问。
public class SomeClass
{
private readonly static object _sync = new object();
public void WriteAllText()
{
lock(_sync)
{
File.WriteAllText("myfile.txt", "Hello world from a synchronized file access!!!");
}
}
}
}
这样就可以防止多个线程同时访问同一个文件。
在此处了解lock
阻止:
http://msdn.microsoft.com/en-us/library/c5kehkcz(v=vs.110).aspx
答案 1 :(得分:0)
您应该考虑FileStream
。有一个很好的例子,说明你要做的事情here。
答案 2 :(得分:0)
我要考虑的另一种方法是让一个编写器线程由队列提供服务。想要写入文件的所有其他线程通过将文本项添加到队列末尾来完成此操作。 writer线程从队列的前面删除文本项并将它们写入文件。您可以使用lock语句来同步对队列对象的访问,并使用AutoResetEvent对象在向队列添加内容时向编写器线程发出信号,让它知道队列中有什么东西需要处理。