public override async Task OnActivateAsync() { KeyData = new ConnectionGrainKey(this.GetPrimaryKeyString()); _streamProvider = GetStreamProvider(Constants.STREAM_PROVIDER); var subscriptionTasks = new List <Task>(); foreach (var connection in State.Connections) { var clientDisconnectStream = _streamProvider.GetStream <string>(Constants.CLIENT_DISCONNECT_STREAM_ID, connection.Key); var subscriptions = await clientDisconnectStream.GetAllSubscriptionHandles(); foreach (var subscription in subscriptions) { subscriptionTasks.Add(subscription.ResumeAsync(async(connectionId, _) => await Remove(connectionId))); } } await Task.WhenAll(subscriptionTasks); }
public override async Task OnActivateAsync() { KeyData = new ConnectionGrainKey(this.GetPrimaryKeyString()); _logger.Info("Activate {hubName} ({groupId})", KeyData.HubName, KeyData.Id); _streamProvider = GetStreamProvider(Constants.STREAM_PROVIDER); _cleanupTimer = RegisterTimer( _ => CleanupStreams(), State, _cleanupPeriod, _cleanupPeriod); if (State.Connections.Count == 0) { return; } foreach (var connection in State.Connections) { var clientDisconnectStream = GetClientDisconnectStream(connection); await clientDisconnectStream.ResumeAllSubscriptionHandlers(async (connectionId, _) => await Remove(connectionId)); } }