Exemple #1
0
        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());
        }
Exemple #2
0
        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());
        }