В C # вы можете использовать блоки try-catch-finally и выполнить уборку в finally.(Который должен выполняться независимо от того, что).
Вы можете добиться почти того же самого, создав класс, реализующий IDisposable
, который получает блокировку и освобождает ее при вызове метода удаления.Затем всякий раз, когда вы используете этот класс (который получает блокировку), вставляйте в блок использования
using (RecordLockingThing myThing = new RecordLockingThing())
{
//DoStuff
}
//Now myThing is out of scope, and will have been disposed.
Просто убедитесь, что ваш RecordLockingThing
правильно и безопасно снимает блокировку в методе утилизации.
Другая стратегия может заключаться в том, чтобы не отмечать записи, чтобы заблокировать их при открытии, а вместо этого помечать их как отредактированные (или увеличивать номер редакции).Затем вы можете разрешить открытию записи более одного человека.Когда кто-то отправляет редактирование, заставьте его также предоставить номер редакции, если он совпадает, зафиксируйте редактирование и увеличьте редакцию, если нет, сообщите о "столкновении в воздухе", либо отмените изменения (не очень дружелюбно), либо попробуйтеи позволить пользователю объединять записи.
Если правки сравнительно редки по сравнению с чтениями, вторая стратегия будет более полезной на практике, так как вы никогда не помешаете пользователю хотя бы просмотреть запись, инет риска осиротевших замков.