С этим кодом для очень простого регистратора :
lock (string.Concat("LogWritter_", this.FileName))
{
using (var fileStream = File.Open(this.FileName, FileMode.Append, FileAccess.Write, FileShare.Read))
{
using (var w = new StreamWriter(fileStream))
{
w.Write(message);
}
}
}
, когда Я пробую это из нескольких потоков одновременно. Я быстро получаю сообщение об ошибке :
The process can't access the file because its being used by another file.
. Почему блокировка не препятствует одновременному доступу потоков к файлу?
Неважно, вызывают ли потоки один и тот же экземпляр или разные экземпляры одного и того же файла. Также я подумал, что это может быть из-за некоторой задержки при записи файлов в Windows, но в Linux происходит то же самое.