public Task StartAsync(CancellationToken stoppingToken) { _logger.LogInformation("Timed Hosted Service running."); while (!stoppingToken.IsCancellationRequested) { try { if (!_processRabbitReady) { var scope = _serviceScopeFactory.CreateScope(); RabbitMQService rabbitMQService = scope.ServiceProvider.GetRequiredService <RabbitMQService>(); Discover descubrimiento = new Discover(_logger, _serviceScopeFactory); rabbitMQService.ListenToQueue(new RabbitMQService.ReceivedDelegate(descubrimiento.ProcessItem), new RabbitMQService.ShutDownDelegate(OnShutDown)); _processRabbitReady = true; } if (!_processDiscoverLoadedEntities) { new Thread(() => { try { ConfigService ConfigService = new ConfigService(); //Todos los lunes a la 8:00 sería "0 0 8 ? * MON" var expression = new CronExpression(ConfigService.GetLaunchDiscoverLoadedEntitiesCronExpression()); DateTimeOffset?time = expression.GetTimeAfter(DateTimeOffset.UtcNow); if (time.HasValue) { Thread.Sleep((time.Value.UtcDateTime - DateTimeOffset.UtcNow)); Discover descubrimiento = new Discover(_logger, _serviceScopeFactory); descubrimiento.ApplyDiscoverLoadedEntities(ConfigService.GetSleepSecondsAfterProcessEntityDiscoverLoadedEntities(), _serviceScopeFactory.CreateScope().ServiceProvider.GetRequiredService <CallUrisFactoryApiService>()); _processDiscoverLoadedEntities = false; } } catch (Exception ex) { Logging.Error(ex); } }).Start(); _processDiscoverLoadedEntities = true; } if (!_processRemoveBlankNodes) { new Thread(() => { try { #region Cargamos configuraciones ConfigSparql ConfigSparql = new ConfigSparql(); string SGI_SPARQLEndpoint = ConfigSparql.GetEndpoint(); string SGI_SPARQLGraph = ConfigSparql.GetGraph(); string SGI_SPARQLQueryParam = ConfigSparql.GetQueryParam(); string SGI_SPARQLUsername = ConfigSparql.GetUsername(); string SGI_SPARQLPassword = ConfigSparql.GetPassword(); #endregion var expression = new CronExpression("0 0 * ? * *"); DateTimeOffset?time = expression.GetTimeAfter(DateTimeOffset.UtcNow); CallUrisFactoryApiService callUrisFactoryApiService = _serviceScopeFactory.CreateScope().ServiceProvider.GetRequiredService <CallUrisFactoryApiService>(); HashSet <string> graphs = new HashSet <string>(); ORCID_API orcid_api = new ORCID_API(); CROSSREF_API crossref_api = new CROSSREF_API(); DBLP_API dblp_api = new DBLP_API(); DBPEDIA_API dbpedia_api = new DBPEDIA_API(); DOAJ_API doaj_api = new DOAJ_API(); PUBMED_API pubmed_api = new PUBMED_API(); RECOLECTA_API recolecta_api = new RECOLECTA_API(); SCOPUS_API scopus_api = new SCOPUS_API(); WOS_API wos_api = new WOS_API(); graphs.Add(callUrisFactoryApiService.GetUri("Graph", orcid_api.Id)); graphs.Add(callUrisFactoryApiService.GetUri("Graph", crossref_api.Id)); graphs.Add(callUrisFactoryApiService.GetUri("Graph", dblp_api.Id)); graphs.Add(callUrisFactoryApiService.GetUri("Graph", dbpedia_api.Id)); graphs.Add(callUrisFactoryApiService.GetUri("Graph", doaj_api.Id)); graphs.Add(callUrisFactoryApiService.GetUri("Graph", pubmed_api.Id)); graphs.Add(callUrisFactoryApiService.GetUri("Graph", recolecta_api.Id)); graphs.Add(callUrisFactoryApiService.GetUri("Graph", scopus_api.Id)); graphs.Add(callUrisFactoryApiService.GetUri("Graph", wos_api.Id)); graphs.Add(SGI_SPARQLGraph); if (time.HasValue) { Thread.Sleep((time.Value.UtcDateTime - DateTimeOffset.UtcNow)); AsioPublication asioPublication = new AsioPublication(SGI_SPARQLEndpoint, SGI_SPARQLQueryParam, SGI_SPARQLGraph, SGI_SPARQLUsername, SGI_SPARQLPassword); foreach (string graph in graphs) { asioPublication.DeleteOrphanNodes(new HashSet <string>() { graph }); } _processRemoveBlankNodes = false; } } catch (Exception ex) { Logging.Error(ex); } }).Start(); _processRemoveBlankNodes = true; } } catch (Exception ex) { Logging.Error(ex); } Thread.Sleep(1000); } return(Task.CompletedTask); }