@@ -46,6 +46,7 @@ public class Page : IDisposable
4646 private bool _screenshotBurstModeOn ;
4747 private ScreenshotOptions _screenshotBurstModeOptions ;
4848 private readonly TaskCompletionSource < bool > _closeCompletedTcs = new TaskCompletionSource < bool > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
49+ private TaskCompletionSource < bool > _sessionClosedTcs ;
4950 private readonly TimeoutSettings _timeoutSettings ;
5051 private bool _fileChooserInterceptionIsDisabled ;
5152 private ConcurrentDictionary < Guid , TaskCompletionSource < FileChooser > > _fileChooserInterceptors ;
@@ -347,6 +348,25 @@ public int DefaultTimeout
347348 internal bool HasPopupEventListeners => Popup ? . GetInvocationList ( ) . Any ( ) == true ;
348349 internal FrameManager FrameManager { get ; private set ; }
349350
351+ private Task SessionClosedTask
352+ {
353+ get
354+ {
355+ if ( _sessionClosedTcs == null )
356+ {
357+ _sessionClosedTcs = new TaskCompletionSource < bool > ( TaskCreationOptions . RunContinuationsAsynchronously ) ;
358+ Client . Disconnected += clientDisconnected ;
359+
360+ void clientDisconnected ( object sender , EventArgs e )
361+ {
362+ _sessionClosedTcs . TrySetException ( new TargetClosedException ( "Target closed" , "Session closed" ) ) ;
363+ Client . Disconnected -= clientDisconnected ;
364+ }
365+ }
366+
367+ return _sessionClosedTcs . Task ;
368+ }
369+ }
350370 #endregion
351371
352372 #region Public Methods
@@ -1520,11 +1540,17 @@ void requestEventListener(object sender, RequestEventArgs e)
15201540
15211541 FrameManager . NetworkManager . Request += requestEventListener ;
15221542
1523- return await requestTcs . Task . WithTimeout ( timeout , t =>
1543+ await Task . WhenAny ( requestTcs . Task , SessionClosedTask ) . WithTimeout ( timeout , t =>
15241544 {
15251545 FrameManager . NetworkManager . Request -= requestEventListener ;
15261546 return new TimeoutException ( $ "Timeout Exceeded: { t . TotalMilliseconds } ms exceeded") ;
15271547 } ) . ConfigureAwait ( false ) ;
1548+
1549+ if ( SessionClosedTask . IsFaulted )
1550+ {
1551+ await SessionClosedTask ;
1552+ }
1553+ return await requestTcs . Task ;
15281554 }
15291555
15301556 /// <summary>
@@ -1574,7 +1600,13 @@ void responseEventListener(object sender, ResponseCreatedEventArgs e)
15741600
15751601 FrameManager . NetworkManager . Response += responseEventListener ;
15761602
1577- return await responseTcs . Task . WithTimeout ( timeout ) . ConfigureAwait ( false ) ;
1603+ await Task . WhenAny ( responseTcs . Task , SessionClosedTask ) . WithTimeout ( timeout ) . ConfigureAwait ( false ) ;
1604+
1605+ if ( SessionClosedTask . IsFaulted )
1606+ {
1607+ await SessionClosedTask ;
1608+ }
1609+ return await responseTcs . Task ;
15781610 }
15791611
15801612 /// <summary>
0 commit comments