2015-02-25 3 views
1

Я ищу защиту ресурсов, например ReaderWriterLock, которая блокирует поток на Enter, но не полагается, что Release/Exit вызывается в той же теме. Вместо этого я предпочел бы метод выпуска/выхода IDisposable. (Высота блокировки от чтения до записи вообще не требуется).non thread specific IDisposable based ReaderWriterLock

Я уже обернул ReaderWriterLock с помощью аксессуара IDisposable, который отлично работает, пока не будет задействована асинхронная модель ожидания. Когда я использую его с асинхронным ожиданием в контексте сервера (ASP.NET Web Api), тогда даже простой блок using вызывает Dispose() в другом потоке, если в блоке использования есть await.

Кто-нибудь знает класс (Framework или NuGet), который способен к такой блокировке с несколькими чтениями и одиночными записями?

+0

«Кто-нибудь в курсе класса (Framework или NuGet), который способен к такой блокировке Multi-Read-Single-Write? " Для этого ReaderWriterLockSlim' специально разработан ** для этой цели. Я думаю, что ваш вопрос должен состоять в том, как реализовать это в асинхронной среде? – aevitas

+0

@aevitas Из [msdn] (https://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim%28v=vs.110%29.aspx): 'ReaderWriterLockSlim управляет связью потоков; то есть каждый объект Thread должен сделать свои собственные вызовы методов для входа и выхода из режима блокировки. ', поэтому я думаю, что у вас есть выход в потоке, который вы вводите. – xanatos

+1

[Построение примитивов для координации Async, часть 7: AsyncReaderWriterLock] (http: // blogs .msdn.com/б/pfxteam/Архив/2012/02/12/строительные Асинхры-координационные-примитивы-часть-7-asyncreaderwriterlock.aspx). – Noseratio

ответ

2

Да.

+1

+1. Но я вынужден указать, что сложность RWL почти никогда не требуется, даже если методы имеют семантику чтения/записи. В большинстве случаев простой SemaphoreSlim/AsyncLock проще и достаточен. –

Смежные вопросы