#c# #service-worker #asp.net-core-3.1
Вопрос:
У меня есть проект service worker net core 3.1, который отвечает за получение данных с онлайн-устройств:
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider(); var httpClientFactory = serviceProvider.GetServicelt;IHttpClientFactorygt;(); while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); //Get Relevant Gateways string GetRouters = "SELECT * FROM RouterModel;"; var Routers = await dataAccess.LoadDatalt;RouterModel, dynamicgt;(GetRouters, new { }, _config.GetConnectionString("GalronDb")); string GetMeters = "SELECT * FROM PowerMeterModel;"; var Meters = await dataAccess.LoadDatalt;PowerMeterModel, dynamicgt;(GetMeters, new { }, _config.GetConnectionString("GalronDb")); foreach (RouterModel Router in Routers) { if (Router.IsHavePowerMeters) { foreach (PowerMeterModel Meter in Meters.Where(x =gt; x.IdGateway == Router.Id).ToList()) { if (Meter.IsActive) { actionList.Add(new Action(() =gt; { GetNewReadings(Router, Meter, httpClientFactory); })); } } } } Parallel.Invoke(actionList.ToArray()); actionList.Clear(); _logger.LogInformation("*************** Sync loop is finished ***************"); await Task.Delay(5 * 60 * 1000, stoppingToken); } }
Проблема с приведенным выше кодом заключается в том, что все устройства зависят друг от друга, если в загруженной сети находится всего несколько устройств с плохим lantecty, это заставит все остальные устройства сидеть и ждать их, прежде чем начнется новый цикл синхронизации.
Я ищу решение для динамического назначения рабочего на каждое устройство, чтобы изолировать устройства с медленной синхронизацией, что позволит быстро синхронизировать все остальные устройства.
Я немного новичок в такого рода проектах, и мне трудно понять, как это сделать. Кто-нибудь может, пожалуйста, помочь мне с этим ?