private async Task HubOnDisconnectedAsync(HubConnectionContext connection, Exception exception) { // send close message before aborting the connection await SendCloseAsync(connection, exception); // We wait on abort to complete, this is so that we can guarantee that all callbacks have fired // before OnDisconnectedAsync try { // Ensure the connection is aborted before firing disconnect await connection.AbortAsync(); } catch (Exception ex) { Log.AbortFailed(_logger, ex); } try { await _dispatcher.OnDisconnectedAsync(connection, exception); } catch (Exception ex) { Log.ErrorDispatchingHubEvent(_logger, "OnDisconnectedAsync", ex); throw; } }
private async Task HubOnDisconnectedAsync(HubConnectionContext connection, Exception exception) { try { // We wait on abort to complete, this is so that we can guarantee that all callbacks have fired // before OnDisconnectedAsync try { // Ensure the connection is aborted before firing disconnect await connection.AbortAsync(); } catch (Exception ex) { _logger.AbortFailed(ex); } using (var scope = _serviceScopeFactory.CreateScope()) { var hubActivator = scope.ServiceProvider.GetRequiredService <IHubActivator <THub> >(); var hub = hubActivator.Create(); try { InitializeHub(hub, connection); await hub.OnDisconnectedAsync(exception); } finally { hubActivator.Release(hub); } } } catch (Exception ex) { _logger.ErrorInvokingHubMethod("OnDisconnectedAsync", ex); throw; } }