private async Task ConnectToClusterAsync() { await EnsureOrleansClusterConnection(); OrleansLog.Subscribing(_logger, _id); var provider = _clusterClient.GetStreamProvider(Constants.STREAM_PROVIDER); _clientMessageStream = provider.GetStream <ClientInvocationMessage>(_id, Constants.CLIENT_MESSAGE_STREAM_NAMESPACE); await _clientMessageStream.SubscribeAsync(async (message, token) => await OnReceivedClientMessageAsync(message)); _allMessageStream = provider.GetStream <AllInvocationMessage>(_hubTypeId, Constants.HUB_MESSAGE_STREAM_NAMESPACE); await _allMessageStream.SubscribeAsync(async (message, token) => await OnReceivedAllMessageAsync(message)); try { await _clusterClient.GetHubLifetimeManagerGrain(_id, _hubTypeId).OnInitializeAsync(_options.TimeoutInterval ?? TimeSpan.FromSeconds(30)); // Tick heartbeat heartbeatDisposable = Observable.Interval(TimeSpan.FromSeconds(1)) .Subscribe(async value => { await _clusterClient.GetHubLifetimeManagerGrain(_id, _hubTypeId).OnHeartbeatAsync(); }); } catch (Exception e) { OrleansLog.InternalMessageFailed(_logger, e); } }