@@ -147,8 +147,8 @@ async ValueTask<NpgsqlConnector> RentAsync(
147147 if ( async )
148148 {
149149 connector = await _idleConnectorReader . ReadAsync ( finalToken ) ;
150- if ( CheckIdleConnector ( connector ) )
151- return connector;
150+ if ( await CheckIdleConnector ( connector, async , cancellationToken ) )
151+ return connector ! ;
152152 }
153153 else
154154 {
@@ -203,8 +203,13 @@ internal sealed override bool TryGetIdleConnector([NotNullWhen(true)] out Npgsql
203203 return false;
204204 }
205205
206- [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
207206 bool CheckIdleConnector ( [ NotNullWhen ( true ) ] NpgsqlConnector ? connector )
207+ {
208+ return CheckIdleConnector ( connector , async : false) . GetAwaiter ( ) . GetResult( ) ;
209+ }
210+
211+ [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
212+ async Task < bool > CheckIdleConnector ( NpgsqlConnector ? connector , bool async , CancellationToken cancellationToken = default )
208213 {
209214 if ( connector is null)
210215 return false;
@@ -218,14 +223,14 @@ bool CheckIdleConnector([NotNullWhen(true)] NpgsqlConnector? connector)
218223 // if keepalive isn't turned on.
219224 if ( connector. IsBroken)
220225 {
221- CloseConnector ( connector ) ;
226+ await CloseConnector( connector , async , cancellationToken ) ;
222227 return false;
223228 }
224229
225230 if ( _connectionLifetime ! = TimeSpan . Zero && DateTime . UtcNow > connector . OpenTimestamp + _connectionLifetime )
226231 {
227232 LogMessages. ConnectionExceededMaximumLifetime( _logger, _connectionLifetime , connector . Id ) ;
228- CloseConnector ( connector ) ;
233+ await CloseConnector ( connector , async , cancellationToken ) ;
229234 return false;
230235 }
231236
@@ -320,7 +325,7 @@ internal sealed override void Return(NpgsqlConnector connector)
320325 Debug . Assert ( written ) ;
321326 }
322327
323- internal override void Clear ( )
328+ internal override async Task Clear ( bool async , CancellationToken cancellationToken = default )
324329 {
325330 Interlocked . Increment ( ref _clearCounter ) ;
326331
@@ -332,9 +337,9 @@ internal override void Clear()
332337 var count = _idleCount ;
333338 while ( count > 0 && _idleConnectorReader . TryRead ( out var connector ) )
334339 {
335- if ( CheckIdleConnector ( connector ) )
340+ if ( await CheckIdleConnector ( connector , async , cancellationToken ) )
336341 {
337- CloseConnector ( connector ) ;
342+ await CloseConnector ( connector ! , async , cancellationToken ) ;
338343 count -- ;
339344 }
340345 }
@@ -346,10 +351,15 @@ internal override void Clear()
346351 }
347352
348353 void CloseConnector ( NpgsqlConnector connector )
354+ {
355+ CloseConnector ( connector , async: false ) . GetAwaiter ( ) . GetResult ( ) ;
356+ }
357+
358+ async Task CloseConnector ( NpgsqlConnector connector , bool async , CancellationToken cancellationToken = default )
349359 {
350360 try
351361 {
352- connector . Close ( ) ;
362+ await connector . Close ( async , cancellationToken ) ;
353363 }
354364 catch ( Exception exception )
355365 {
0 commit comments