С помощью этого кода для очень простой регистратор:Почему блокировка в этом коде не работает?
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 происходит то же самое.
хеш-код! = Ссылка. Используйте 'ReferenceEquals'. –
хэш-код! = Ссылка – TheBuzzSaw
Хэш-код является дайджестом * содержимого * строки. Ссылка содержит сведения об этом конкретном экземпляре. Компилятор имеет опции для автоматического комбинирования жестко закодированных строк с идентичным содержимым, но во время выполнения не выполняется тонны ретро-сравнений, чтобы объединить несколько строк. – TheBuzzSaw