Exemplo n.º 1
0
        static void Main(string[] args)
        {
            //List<IPicker> list = new AHK3PickerManager().GetPickerList();

            //MainWork work = new MainWork();
            //work.Run();

            List <OpenResult> resultList;
            PickerManager     manager = new FC3DPickerManager();
            //List<IPicker> pickerList = manager.GetPickerList();
            IPicker picker = manager.GetPicker(DataSourceEnum._168);

            resultList = picker.Run();

            //int result = OpenResultApp.Insert(resultList);

            Console.Read();
        }
        /// <summary>
        /// 执行抓取
        /// </summary>
        /// <param name="taskCount">线程数量</param>
        public List <OpenResult> DoPick(int taskCount)
        {
            //取数据源开关
            List <DataSource> dataSourceList = CacheManager.GetOrSet(CacheKey.DATASOURCE_KEY, () =>
            {
                return(DataSourceApp.GetList().Where(d => d.status == 1).ToList());
            }, 7 * 24 * 60 * 60);

            if (dataSourceList.Count == 0)
            {
                throw new Exception($"没有可用的数据源");
            }

            string dataSourceStr = dataSourceList.Aggregate(string.Empty, (c, d) => c + d.name + ",").TrimEnd(',');

            Type             type      = typeof(DataSourceEnum);
            List <FieldInfo> fieldInfo = type.GetFields().ToList();

            List <OpenResult> list   = new List <OpenResult>();
            ParallelOptions   option = new ParallelOptions {
                MaxDegreeOfParallelism = Math.Min(taskCount, fieldInfo.Count)
            };

            Parallel.ForEach(fieldInfo, option, field =>
            {
                string dataSource = field.GetValue(null).ToString();
                if (dataSourceStr.Contains(dataSource))
                {
                    IPicker picker = this.GetPicker(dataSource);
                    if (picker != null)
                    {
                        list.AddRange(picker.Run());
                    }
                }
            });

            list = DistinctEx(list);
            return(list.OrderBy(o => o.issue_number).ToList());
        }