Очередь файловых операций на потом, когда файл заблокирован - PullRequest
4 голосов
/ 15 мая 2011

Я пытаюсь реализовать значение идентификатора автоинкремента на основе файла (при значении int, хранящемся в файле TXT), и я пытаюсь найти лучший способ решения проблем параллелизма. Эта личность будет использоваться в качестве уникального идентификатора для моего контента. При сохранении нового содержимого этот файл открывается, значение читается, увеличивается, новое содержимое сохраняется, а увеличенное значение записывается обратно в файл (сохраняем ли мы следующий доступный идентификатор или последний выданный, не имеет значения). Пока это делается, может появиться другой процесс и попытаться сохранить новый контент. Предыдущий процесс открывает файл с FileShare.None, поэтому никакой другой процесс не сможет прочитать файл, пока он не будет освобожден первым процессом. Хотя вероятность этого минимальна, это все же может произойти.

Теперь, когда это происходит, у нас есть два варианта:

  1. ждать, пока файл станет доступным -

Эмулировать ожидание файла. Открыть в C #, когда файл заблокирован

мы говорим о миллисекундах здесь, так что я думаю, что это не будет проблемой, если что-то странное случится, и файл никогда не станет доступным, тогда это решение приведет к бесконечному циклу, поэтому не идеальное решение

  1. реализовать какую-то очередь и запускать все операции над файлами в очереди. Мои требования к пользовательскому интерфейсу таковы, что во время сохранения / изменения файлов пользователь никогда не должен информироваться об исключениях или о том, что что-то пошло не так - он получал бы информацию о них через очень дружественный пользовательский интерфейс позже, когда операции также не выполнялись в очереди.

На момент написания этой статьи решение должно работать в приложении ASP.NET MVC (синхронно и асинхронно через AJAX), но, если возможно, оно должно использовать концепции, которые также могут работать в приложениях Silverlight, Windows Forms или WPF. .

Что касается этих двух вариантов, какой из них, по вашему мнению, лучше, а для второго варианта - какие возможные технологии для его реализации?

1 Ответ

2 голосов
/ 15 мая 2011

Класс ReaderWriterLockSlim кажется хорошим решением для синхронизации доступа к общему ресурсу.

...