Я выяснил, почему не был вызван OnDisconnect:
Сервер Blazor удаляет соединение, но не HubConnection, который должен быть удален вручную. Поскольку Blazor не поддерживает IAsyncDisposable, вызов DisposeAsyn c не ожидается, а также не следует ожидать DisposeAsyn c:
@implements IDisposable
... rest of component code ...
@code {
public void Dispose()
{
_hubConnection.DisposeAsync();
}
}
Это не только для Blazor Server. Соединения-концентраторы в Blazor WebAssembly также должны быть удалены, если они находятся в одном компоненте.