Это зависит от вашего действия.
Несколько потоков могут читать файл, когда он заблокирован. *
Однако, если вы пытаетесь записать в этот файл другим потоком, когда блокировка все еще удерживается другим потоком, (новый) поток будет ждать, пока не получит блокировку.
Имейте в виду, что можно определить тайм-аут. Как указано в документации
Если интервал тайм-аута истекает и запрос блокировки не был предоставлен, метод возвращает управление вызывающему потоку, генерируя ApplicationException. Поток может перехватить это исключение и определить, какое действие предпринять дальше.
Итак, ссылаясь на ваш конкретный c вопрос: файл действительно будет пропущен , если * 1017 Установлен * тайм-аут , и этот тайм-аут был превышен .
Этот тайм-аут можно установить с помощью перегрузки AcquireWriterLock(TimeSpan timeout)
.
Что важно помнить, так это то, что - если поток, вызывающий AcquireWriterLock
, все еще имеет действующую блокировку считывателя, операция зайдет в тупик.
Если поток вызывает AcquireWriterLock, пока у него еще есть считыватель lock, он будет заблокирован самим блокировкой считывателя; если указан бесконечный тайм-аут, поток зайдет в тупик. Чтобы избежать таких взаимоблокировок, используйте IsReaderLockHeld, чтобы определить, имеет ли текущий поток уже блокировку чтения.
* Обратите внимание, что тайм-аут также может быть определен для чтения с помощью AcquireReaderLock(int msTimeout)
метод. Если время ожидания истечет до того, как блокировка будет предоставлена, будет выдано ApplicationException
, что означает, что чтение также будет пропущено.