在将问题标记为重复之前,请仔细阅读问题。
foo.txt
)我们如何确保从所有进程对文件进行序列化写入,而不必在文件服务器上创建 .lock 文件。
注意不要使用lock
/ Mutex
/ Semaphore
/ WaitHandle
,因为进程在不同的计算机上运行。
我能想到的最好的方法(我没有理由认为它不起作用)是
private void TryWrite(string filePath, string payload)
{
for (var i = 0; i < 10; ++i)
{
try
{
using (var fs = File.Open(filePath, FileMode.Append, FileAccess.Write, FileShare.Read))
using(var writer = new StreamWriter(fs))
{
writer.WriteLine(payload);
}
return;
}
catch
{
System.Threading.Thread.Sleep(1000 * (i + 1));
}
}
// log unable to write
}
但是我仍然偶尔会收到来自不同进程的交错写入。
非常感谢您的帮助。