Я разрабатываю некоторые утилиты для управления потоками для игрового сервера и экспериментирую с использованием IDisposable
"токена", чтобы я мог использовать такой код:
using(SyncToken playerListLock = Area.ReadPlayerList())
{
//some stuff with the player list here
}
Идея заключается в том, что яполучить блокировку чтения в списке игроков в области, и он автоматически разблокируется, когда он выходит из области действия с помощью блока using.Пока что все это реализовано и работает, но меня беспокоит время вызова Dispose()
.
. Переменная SyncLock
просто помечается для удаления, когда программа покидает блок using, а затембыть очищенным сборщиком мусора в какой-то момент позже, или текущий поток выполняет метод Dispose()
как часть выхода из блока using
?
Этот шаблон в основном RAII, где блокировкавыделяемый ресурс.Пример этого паттерна (т. Е. Использование IDisposable
"токена") также использовался Джоном Скитом в его MiscUtils здесь