public async Task StartDataSubscriptionsInitializationAsync()

in DeviceBridge/Services/SubscriptionScheduler.cs [145:164]


        public async Task StartDataSubscriptionsInitializationAsync()
        {
            _logger.Info("Attempting to initialize subscriptions for all devices");
            var deviceIds = dataSubscriptionsToInitialize.Keys.ToList();

            // Synchronizes one batch of devices at a time. This avoids the creation of too many async tasks simultaneously.
            for (int i = 0; i < deviceIds.Count; ++i)
            {
                var deviceId = deviceIds[i];
                var _ = SynchronizeDeviceDbAndEngineDataSubscriptionsAsync(deviceId, true).ContinueWith(t => _logger.Error(t.Exception, "Failed to initialize DB subscriptions for device {deviceId}", deviceId), TaskContinuationOptions.OnlyOnFaulted);

                if ((i + 1) % _connectionBatchSize == 0 && (i + 1) < deviceIds.Count)
                {
                    _logger.Info("Waiting {subscriptionFullSyncBatchIntervalMs} ms before syncing subscriptions for next {subscriptionFullSyncBatchSize} devices", _connectionBatchIntervalMs, _connectionBatchSize);
                    await Task.Delay((int)_connectionBatchIntervalMs);
                }
            }

            _logger.Info("Successfully initialized subscriptions from DB for {deviceCount} devices", deviceIds.Count);
        }