public async Task <IPerformanceData[]> RequestProcess(IPerformanceFilter filter, CancellationToken cancellationToken) { Trace.TraceInformation("PlayBillResolver.RequestProcess started"); DateTime[] months = filter.StartDate.GetMonthsBetween(filter.EndDate); List <IPerformanceData> performances = new List <IPerformanceData>(); foreach (var dateTime in months) { cancellationToken.ThrowIfCancellationRequested(); string content = await Request(dateTime, cancellationToken); performances.AddRange(await _playbillParser.Parse(content, cancellationToken)); } cancellationToken.ThrowIfCancellationRequested(); IEnumerable <IPerformanceData> filtered = performances.Where(item => _filterChecker.IsDataSuitable(item, filter)).ToArray(); Task[] resolvePricesTasks = filtered .Select(item => Task.Run(async() => { item.MinPrice = (await _ticketParser.ParseFromUrl(item.Url, cancellationToken)).GetMinPrice(); }, cancellationToken)).ToArray(); await Task.WhenAll(resolvePricesTasks.ToArray()); Trace.TraceInformation(" PlayBillResolver.RequestProcess finished"); return(filtered.ToArray()); }
public async Task <IPerformanceData[]> RequestProcess(DateTime startDate, DateTime endDate, IPerformanceFilter filter) { string content = await Request(startDate); IPerformanceData[] perfomances = _playBillParser.Parse(content).GetAwaiter().GetResult(); IList <Task> tasks = new List <Task>(); var filtredList = perfomances.Where(item => _filterChecker.IsDataSuitable(item, filter)); foreach (var item in filtredList) { tasks.Add(Task.Run(async() => item.Tickets = await _ticketParser.ParseFromUrl(item.Url))); } Task.WaitAll(tasks.ToArray()); Trace.TraceInformation("Parsing finished"); Trace.TraceInformation(""); return(filtredList.ToArray()); }