public void GetFlights(FlightsPresetSearchParams flightsPresetSearchParams, long chatId, Action <IEnumerable <Flight>, DestinationPlace, long, bool> callback) { List <FlightSearchParams> flightSearchParams = new List <FlightSearchParams>(); // missed logic of range search foreach (DestinationPlace dPlace in flightsPresetSearchParams.DestinationPlaces) { FlightSearchParams flightSearchParam = new FlightSearchParams(); flightSearchParam.DestinationPlace = dPlace; flightSearchParam.InboundDate = flightsPresetSearchParams.EndDateOfRange; flightSearchParam.OutboundDate = flightsPresetSearchParams.StartDateOfRange; flightSearchParams.Add(flightSearchParam); } int maxRetryAttempts = 3; TimeSpan pauseBetweenFailures = TimeSpan.FromMinutes(5); int iteration = 0; Parallel.ForEach(flightSearchParams, async(flightSearchParam) => { log.Info("start get data for " + flightSearchParams.ToString()); var retryPolicy = Policy .Handle <Exception>() .WaitAndRetryAsync(maxRetryAttempts, i => pauseBetweenFailures); try { await retryPolicy.ExecuteAsync(async() => { log.Info(string.Format("Getting data for search params {0} , try no [{1}] ", flightSearchParams.ToString(), iteration)); IEnumerable <Flight> flights = GetFlights(flightSearchParam, flightsPresetSearchParams.FlightSerachFilter); log.Info(string.Format("Data for search params {0} , received ", flightSearchParams.ToString())); bool res; lock (locker) { iteration++; res = iteration == flightSearchParams.Count; } if (res) { callback(flights, flightSearchParam.DestinationPlace, chatId, true); } else { callback(flights, flightSearchParam.DestinationPlace, chatId, false); } }); } catch (Exception e) { log.Error(string.Format("Getting data for search params {0} , failed ", flightSearchParams.ToString())); } }); }
private static void SearchFlight(FlightSearchParams flightSearchParams, long chatId) { Core core = new Core(); List <DestinationPlace> destinationPlaces = new List <DestinationPlace>() { DestinationPlace.UKRAINE_KIEV, DestinationPlace.UKRAINE_LVIV, DestinationPlace.UKRAINE_ODESA }; FlightsPresetSearchParams flightsPresetSearchParams = new FlightsPresetSearchParams(); flightsPresetSearchParams.DatesRangeSearch = false; flightsPresetSearchParams.StartDateOfRange = new DateTime(2018, 11, 14); flightsPresetSearchParams.EndDateOfRange = new DateTime(2018, 11, 20); flightsPresetSearchParams.FlightSerachFilter = new FlightSerachFilter(); flightsPresetSearchParams.DestinationPlaces = destinationPlaces; Task.Run(() => core.GetFlights(flightsPresetSearchParams, chatId, ProcessGetFlightsCallBack)); }