Как я могу добавить в общий файл из нескольких процессов в C #? - PullRequest
0 голосов
/ 30 января 2019

Пожалуйста, внимательно прочитайте вопрос, прежде чем пометить его как дубликат.

  • У нас есть файловый сервер 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
}

Но я все еще получаю время от времени чередующиеся записииз разных процессов.

Любая помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...