private void WarmUpService <TServiceSettings, THandler>(ServiceTypeEnum serviceType) where TServiceSettings : BaseServiceSettingsElastic where THandler : IServiceHandler <TServiceSettings> { var services = serviceQuery.GetByType((int)serviceType).ToList(); var handler = serviceProvider.GetService <THandler>(); foreach (var service in services) { ProcessTypeEnum processType; switch (serviceType) { case ServiceTypeEnum.Classifier: processType = ProcessTypeEnum.ClassifierActivate; break; case ServiceTypeEnum.Prc: processType = ProcessTypeEnum.PrcActivate; break; case ServiceTypeEnum.Search: processType = ProcessTypeEnum.SearchActivate; break; default: throw new Exception("Try to warm up service with undefined process activation type!"); } if (service.Status != (int)ServiceStatusEnum.Active) { continue; } var settings = serviceQuery.GetSettings <TServiceSettings>(service.Id); var process = processHandler.Create( processType, service.Id, service, string.Format(Resources.ServiceResources.Activating_0_Service_1, serviceType, service.Name)); service.ProcessIdList.Add(process.Id); serviceQuery.Update(service.Id, service); processHandler.Start(process, (tokenSource) => handler.Activate(process.Id, settings, tokenSource.Token)); } }