@@ -169,7 +169,7 @@ public void RegisterDisconnectedCircuit(CircuitHost circuitHost)
169169 // 1. If the circuit is not found return null
170170 // 2. If the circuit is found, but fails to connect, we need to dispose it here and return null
171171 // 3. If everything goes well, return the circuit.
172- public virtual async Task < CircuitHost > ConnectAsync ( CircuitId circuitId , IClientProxy clientProxy , string connectionId , CancellationToken cancellationToken )
172+ public virtual async Task < CircuitHost > ConnectAsync ( CircuitId circuitId , ISingleClientProxy clientProxy , string connectionId , CancellationToken cancellationToken )
173173 {
174174 Log . CircuitConnectStarted ( _logger , circuitId ) ;
175175
@@ -228,7 +228,7 @@ public virtual async Task<CircuitHost> ConnectAsync(CircuitId circuitId, IClient
228228 }
229229 }
230230
231- protected virtual ( CircuitHost circuitHost , bool previouslyConnected ) ConnectCore ( CircuitId circuitId , IClientProxy clientProxy , string connectionId )
231+ protected virtual ( CircuitHost circuitHost , bool previouslyConnected ) ConnectCore ( CircuitId circuitId , ISingleClientProxy clientProxy , string connectionId )
232232 {
233233 if ( ConnectedCircuits . TryGetValue ( circuitId , out var connectedCircuitHost ) )
234234 {
@@ -363,37 +363,31 @@ internal Task PauseCircuitAsync(
363363 CircuitHost circuitHost ,
364364 string connectionId )
365365 {
366- Log . CircuitPauseStarted ( _logger , circuitHost . CircuitId , connectionId ) ;
367-
368- Task circuitHandlerTask ;
369- lock ( CircuitRegistryLock )
366+ try
370367 {
371- if ( PauseCore ( circuitHost , connectionId ) )
372- {
373- circuitHandlerTask = circuitHost . Renderer . Dispatcher . InvokeAsync ( ( ) => circuitHost . OnConnectionDownAsync ( default ) ) ;
374- }
375- else
376- {
377- // DisconnectCore may fail to disconnect the circuit if it was previously marked inactive or
378- // has been transferred to a new connection. Do not invoke the circuit handlers in this instance.
368+ Log . CircuitPauseStarted ( _logger , circuitHost . CircuitId , connectionId ) ;
379369
380- // We have to do in this instance.
381- return Task . CompletedTask ;
370+ lock ( CircuitRegistryLock )
371+ {
372+ return PauseCore ( circuitHost , connectionId ) ;
382373 }
383374 }
384-
385- return circuitHandlerTask ;
375+ catch ( Exception )
376+ {
377+ Log . CircuitPauseFailed ( _logger , circuitHost . CircuitId , connectionId ) ;
378+ return Task . CompletedTask ;
379+ }
386380 }
387381
388- internal bool PauseCore ( CircuitHost circuitHost , string connectionId )
382+ internal Task PauseCore ( CircuitHost circuitHost , string connectionId )
389383 {
390384 var circuitId = circuitHost . CircuitId ;
391385 if ( ! ConnectedCircuits . TryGetValue ( circuitId , out circuitHost ) )
392386 {
393387 Log . CircuitNotActive ( _logger , circuitId ) ;
394388
395389 // Circuit should be in the connected state for pausing.
396- return false ;
390+ return Task . CompletedTask ;
397391 }
398392
399393 if ( ! string . Equals ( circuitHost . Client . ConnectionId , connectionId , StringComparison . Ordinal ) )
@@ -404,15 +398,13 @@ internal bool PauseCore(CircuitHost circuitHost, string connectionId)
404398 // The circuit is associated with a different connection. One way this could happen is when
405399 // the client reconnects with a new connection before the OnDisconnect for the older
406400 // connection is executed. Do nothing
407- return false ;
401+ return Task . CompletedTask ;
408402 }
409403
410404 var removeResult = ConnectedCircuits . TryRemove ( circuitId , out _ ) ;
411405 Debug . Assert ( removeResult , "This operation operates inside of a lock. We expect the previously inspected value to be still here." ) ;
412406
413- _ = PauseAndDisposeCircuitHost ( circuitHost , saveStateToClient : true ) ;
414-
415- return removeResult ;
407+ return PauseAndDisposeCircuitHost ( circuitHost , saveStateToClient : true ) ;
416408 }
417409
418410 private readonly struct DisconnectedCircuitEntry
@@ -482,5 +474,8 @@ public static void ExceptionDisposingTokenSource(ILogger logger, Exception excep
482474
483475 [ LoggerMessage ( 116 , LogLevel . Debug , "Pausing circuit with id {CircuitId} from connection {ConnectionId}." , EventName = "CircuitPauseStarted" ) ]
484476 public static partial void CircuitPauseStarted ( ILogger logger , CircuitId circuitId , string connectionId ) ;
477+
478+ [ LoggerMessage ( 117 , LogLevel . Debug , "Failed to pause circuit with id {CircuitId} from connection {ConnectionId}." , EventName = "CircuitPauseFailed" ) ]
479+ public static partial void CircuitPauseFailed ( ILogger logger , CircuitId circuitId , string connectionId ) ;
485480 }
486481}
0 commit comments