@@ -11,9 +11,9 @@ internal class AsyncReaderWriterLock
11
11
{
12
12
private readonly SemaphoreSlim _writeLockSemaphore = new SemaphoreSlim ( 1 , 1 ) ;
13
13
private readonly SemaphoreSlim _readLockSemaphore = new SemaphoreSlim ( 0 , 1 ) ;
14
- private readonly IDisposable _writerReleaser ;
15
- private readonly IDisposable _readerReleaser ;
16
- private readonly Task < IDisposable > _readerReleaserTask ;
14
+ private readonly Releaser _writerReleaser ;
15
+ private readonly Releaser _readerReleaser ;
16
+ private readonly Task < Releaser > _readerReleaserTask ;
17
17
private SemaphoreSlim _waitingReadLockSemaphore ;
18
18
private int _readersWaiting ;
19
19
private int _currentReaders ;
@@ -36,7 +36,7 @@ public AsyncReaderWriterLock()
36
36
37
37
internal bool AcquiredWriteLock => _writeLockSemaphore . CurrentCount == 0 ;
38
38
39
- public IDisposable WriteLock ( )
39
+ public Releaser WriteLock ( )
40
40
{
41
41
if ( ! CanEnterWriteLock ( out var waitForReadLocks ) )
42
42
{
@@ -55,7 +55,7 @@ public IDisposable WriteLock()
55
55
return _writerReleaser ;
56
56
}
57
57
58
- public async Task < IDisposable > WriteLockAsync ( )
58
+ public async Task < Releaser > WriteLockAsync ( )
59
59
{
60
60
if ( ! CanEnterWriteLock ( out var waitForReadLocks ) )
61
61
{
@@ -74,7 +74,7 @@ public async Task<IDisposable> WriteLockAsync()
74
74
return _writerReleaser ;
75
75
}
76
76
77
- public IDisposable ReadLock ( )
77
+ public Releaser ReadLock ( )
78
78
{
79
79
if ( CanEnterReadLock ( ) )
80
80
{
@@ -87,11 +87,11 @@ public IDisposable ReadLock()
87
87
return _readerReleaser ;
88
88
}
89
89
90
- public Task < IDisposable > ReadLockAsync ( )
90
+ public Task < Releaser > ReadLockAsync ( )
91
91
{
92
92
return CanEnterReadLock ( ) ? _readerReleaserTask : ReadLockInternalAsync ( ) ;
93
93
94
- async Task < IDisposable > ReadLockInternalAsync ( )
94
+ async Task < Releaser > ReadLockInternalAsync ( )
95
95
{
96
96
await _waitingReadLockSemaphore . WaitAsync ( ) . ConfigureAwait ( false ) ;
97
97
ReleaseWaitingReader ( ) ;
@@ -197,7 +197,7 @@ private void ReleaseWaitingReader()
197
197
}
198
198
}
199
199
200
- private sealed class Releaser : IDisposable
200
+ public struct Releaser : IDisposable
201
201
{
202
202
private readonly AsyncReaderWriterLock _toRelease ;
203
203
private readonly bool _writer ;
0 commit comments