Пожалуйста, внимательно прочитайте вопрос, прежде чем пометить его как дубликат.
- У нас есть файловый сервер Windows.
- У нас также запущено несколько процессов .NET .на разных машинах, которые периодически добавляются в общий файл (на файловом сервере) (назовем его
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
}
Но я все еще получаю время от времени чередующиеся записииз разных процессов.
Любая помощь очень ценится.