private void FillChildsInParallel(IEnumerable <IChangeableData> data, IDataParserHandler parser)
        {
            if (data == null || parser == null)
            {
                return;
            }

            var exceptions = new ConcurrentQueue <Exception>();

            Parallel.ForEach(data, ParallelOptions, item =>
            {
                try
                {
                    item.Childs = parser.Parce(item.Value);
                }
                catch (HtmlRoutineException ex)
                {
                    logger.Warn(ex.Message);
                }
                catch (StopOperatoinException stopEx)
                {
                    exceptions.Enqueue(stopEx);
                    throw new AggregateException(exceptions);
                }
                catch (Exception ex)
                {
                    exceptions.Enqueue(ex);
                }
            });

            if (exceptions.Any())
            {
                throw new AggregateException(exceptions);
            }
        }
        public HtmlCourtsInfoFetcher(IDataParserHandler parser)
        {
            Requires.NotNull(parser, "parser");
            Parser = parser;

            Parser.ViabilityObserver = ViabilityObserver;

            CacelOperation = () => Parser.Cancel();
        }
示例#3
0
 public DistrictsParser(IDataParserHandler successHandler, IDataParserHandler failureHandler)
     : base(successHandler, failureHandler)
 {
 }
 public RegionsParser(IDataParserHandler successHandler, IDataParserHandler failureHandler)
     : base(successHandler, failureHandler)
 {
 }
示例#5
0
        public IDataParserHandler SetNext(IDataParserHandler handler)
        {
            _nextHandler = handler;

            return(handler);
        }
 public DataParserHandlerBase(IDataParserHandler successHandler, IDataParserHandler failureHandler)
 {
     Successor = successHandler;
     Failer    = failureHandler;
 }