File tree Expand file tree Collapse file tree
Providers/CommandProcessing Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1- [main] Added Query.SingleAsync()/SingleOrDefaultAsync and QueryEndpoint.SingleAsync()/SingleOrDefaultAsync methods
1+ [main] Added Query.SingleAsync()/SingleOrDefaultAsync and QueryEndpoint.SingleAsync()/SingleOrDefaultAsync methods
2+ [main] Addressed issue of not disposing IAsyncEnumerator which caused query being open
Original file line number Diff line number Diff line change @@ -95,7 +95,16 @@ public async ValueTask DisposeAsync()
9595 await command . DisposeAsync ( ) . ConfigureAwait ( false ) ;
9696 }
9797 else {
98- await ( ( IAsyncEnumerator < Tuple > ) source ) . DisposeAsync ( ) . ConfigureAwait ( false ) ;
98+ if ( source is IAsyncEnumerator < Tuple > asyncSource ) {
99+ // true async enumerable source
100+ await asyncSource . DisposeAsync ( ) . ConfigureAwait ( false ) ;
101+ }
102+ else {
103+ // preloaded collection of elements,
104+ // like in case of delayed query which has already been read from database
105+ // or greedy enumeration
106+ ( ( IEnumerator < Tuple > ) source ) . Dispose ( ) ;
107+ }
99108 }
100109 }
101110
Original file line number Diff line number Diff line change @@ -54,9 +54,10 @@ public IEnumerator<TItem> GetEnumerator()
5454 public async IAsyncEnumerable < TItem > AsAsyncEnumerable ( )
5555 {
5656 EnsureResultsAlive ( ) ;
57- var enumerator = reader . AsAsyncEnumerator ( ) ;
58- while ( await enumerator . MoveNextAsync ( ) . ConfigureAwait ( false ) ) {
59- yield return enumerator . Current ;
57+ await using ( var enumerator = reader . AsAsyncEnumerator ( ) ) {
58+ while ( await enumerator . MoveNextAsync ( ) . ConfigureAwait ( false ) ) {
59+ yield return enumerator . Current ;
60+ }
6061 }
6162 }
6263
You can’t perform that action at this time.
0 commit comments