@@ -29,7 +29,7 @@ public void Dispose()
2929 {
3030 lock ( _syncRoot )
3131 {
32- _signal ? . Dispose ( ) ;
32+ _signal . Dispose ( ) ;
3333
3434 _isDisposed = true ;
3535 }
@@ -48,10 +48,10 @@ public AsyncQueueDequeueResult<TItem> TryDequeue()
4848 {
4949 if ( _queue . TryDequeue ( out var item ) )
5050 {
51- return new AsyncQueueDequeueResult < TItem > ( true , item ) ;
51+ return AsyncQueueDequeueResult < TItem > . Success ( item ) ;
5252 }
5353
54- return new AsyncQueueDequeueResult < TItem > ( false , default ) ;
54+ return AsyncQueueDequeueResult < TItem > . NonSuccess ;
5555 }
5656
5757 public async Task < AsyncQueueDequeueResult < TItem > > TryDequeueAsync ( CancellationToken cancellationToken )
@@ -60,36 +60,42 @@ public async Task<AsyncQueueDequeueResult<TItem>> TryDequeueAsync(CancellationTo
6060 {
6161 try
6262 {
63- Task task ;
63+ Task task = null ;
6464 lock ( _syncRoot )
6565 {
6666 if ( _isDisposed )
6767 {
68- return new AsyncQueueDequeueResult < TItem > ( false , default ) ;
68+ return AsyncQueueDequeueResult < TItem > . NonSuccess ;
6969 }
7070
71- task = _signal . WaitAsync ( cancellationToken ) ;
71+ if ( _queue . IsEmpty )
72+ {
73+ task = _signal . WaitAsync ( cancellationToken ) ;
74+ }
7275 }
7376
74- await task . ConfigureAwait ( false ) ;
75-
77+ if ( task != null )
78+ {
79+ await task . ConfigureAwait ( false ) ;
80+ }
81+
7682 if ( cancellationToken . IsCancellationRequested )
7783 {
78- return new AsyncQueueDequeueResult < TItem > ( false , default ) ;
84+ return AsyncQueueDequeueResult < TItem > . NonSuccess ;
7985 }
8086
8187 if ( _queue . TryDequeue ( out var item ) )
8288 {
83- return new AsyncQueueDequeueResult < TItem > ( true , item ) ;
89+ return AsyncQueueDequeueResult < TItem > . Success ( item ) ;
8490 }
8591 }
8692 catch ( OperationCanceledException )
8793 {
88- return new AsyncQueueDequeueResult < TItem > ( false , default ) ;
94+ return AsyncQueueDequeueResult < TItem > . NonSuccess ;
8995 }
9096 }
9197
92- return new AsyncQueueDequeueResult < TItem > ( false , default ) ;
98+ return AsyncQueueDequeueResult < TItem > . NonSuccess ;
9399 }
94100 }
95101}
0 commit comments