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);
}