Почему блокировка в этом коде не работает?

С этим кодом для очень простого регистратора :

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 происходит то же самое.

5
задан Santiago Corredoira 4 May 2012 в 17:57
поделиться