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