private async Task StartSearch(Guid searchId, AvailabilityRequest request, AccommodationBookingSettings searchSettings, Dictionary <Suppliers, List <SupplierCodeMapping> > accommodationCodes, AgentContext agent, string languageCode) { foreach (var supplier in searchSettings.EnabledConnectors) { if (!accommodationCodes.TryGetValue(supplier, out var supplierCodeMappings)) { await _stateStorage.SaveState(searchId, SupplierAvailabilitySearchState.Completed(searchId, new List <string>(0), 0), supplier); continue; } // Starting search tasks in a separate thread StartSearchTask(supplier, supplierCodeMappings); } void StartSearchTask(Suppliers supplier, List <SupplierCodeMapping> supplierCodeMappings) { Task.Run(async() => { using var scope = _serviceScopeFactory.CreateScope(); await WideAvailabilitySearchTask .Create(scope.ServiceProvider) .Start(searchId, request, supplierCodeMappings, supplier, agent, languageCode, searchSettings); }); } }
private void StartSearchTasks(Guid searchId, AvailabilityRequest request, AccommodationBookingSettings searchSettings, Location location, AgentContext agent, string languageCode) { var contractsRequest = ConvertRequest(request, location); foreach (var supplier in GetSuppliersToSearch(location, searchSettings.EnabledConnectors)) { Task.Run(async() => { using var scope = _serviceScopeFactory.CreateScope(); await WideAvailabilitySearchTask .Create(scope.ServiceProvider) .Start(searchId, contractsRequest, supplier, agent, languageCode, searchSettings); }); } IReadOnlyCollection <Suppliers> GetSuppliersToSearch(in Location location, List <Suppliers> suppliers) { return(location.Suppliers != null && location.Suppliers.Any() ? location.Suppliers.Intersect(suppliers).ToList() : suppliers); }