我有一个多线程应用程序,它在特定事件上写入同一文件。如何锁定该文件并使线程等待直到其可用?由于其他线程(无法访问)会引发异常,因此我无法使用FileStream。
FileStream fileStream = new FileStream(file, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
有没有适当的方法来做这件事?
我有一个多线程应用程序,它在特定事件上写入同一文件。如何锁定该文件并使线程等待直到其可用?由于其他线程(无法访问)会引发异常,因此我无法使用FileStream。
FileStream fileStream = new FileStream(file, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
有没有适当的方法来做这件事?
您需要一个线程安全的文件写入器来管理线程。您可以使用 ReaderWriterLockSlim
来实现。
public class FileWriter
{
private static ReaderWriterLockSlim lock_ = new ReaderWriterLockSlim();
public void WriteData(string dataWh,string filePath)
{
lock_.EnterWriteLock();
try
{
using (var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
byte[] dataAsByteArray = new UTF8Encoding(true).GetBytes(dataWh);
fs.Write(dataAsByteArray, 0, dataWh.Length);
}
}
finally
{
lock_.ExitWriteLock();
}
}
}
例子:
Parallel.For(0, 100, new ParallelOptions { MaxDegreeOfParallelism = 10 },i =>
{
new FileWriter().WriteData("Sample Data", Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"SampleFile.txt"));
});