Пример #1
0
        static void Main(string[] args)
        {
            JobSchedule   schedule = new JobSchedule();
            IJob          job      = new TestJob();
            RepeatTrigger trigger  = new RepeatTrigger(new TimeSpan(0, 0, 1), DateTime.Parse("9:00:00"), DateTime.Parse("22:08:00"));

            //trigger.IntervalBaseOnStartTime = true;
            //ITrigger trigger = new RepeatTrigger(new TimeSpan(0, 0, 5), DateTime.Parse("12:22:00"), 10);
            //ITrigger trigger = new SingleTrigger(DateTime.Parse("12:47:00"));
            //ITrigger trigger = new SingleTrigger(DateTime.Parse("12:59:00"),5, new TimeSpan(0, 0, 5));
            //ITrigger trigger = new SingleTrigger(DateTime.Parse("12:00:00"), DateTime.Parse("21:59:00"), 5, new TimeSpan(0, 0, 5));
            //ITrigger trigger2 = new SingleTrigger(DateTime.Parse("12:00:00"), DateTime.Parse("21:59:00"), 5, new TimeSpan(0, 0, 5));
            schedule.Add(job, trigger);
            //IJob job2 = new TestJob("test2",new IJob[] { job});

            schedule.Start();
            //Thread.Sleep(1000);
            //schedule.Add(job2, trigger2);
            //schedule.ClearExpiredJobs();
            Console.ReadKey();
            //schedule.ClearExpiredJobs();

            schedule.Stop(true);
            Console.ReadKey();
        }
Пример #2
0
        public override bool Execute(CancellationToken token)
        {
            DateTime curDay = DateTime.Today;

            Console.WriteLine("当前日期:{0}", curDay.ToLongDateString());
            DateTime tradeDay = gmc.GetNextTradingDate("SHSE", curDay.AddDays(-1));

            if (curDay == tradeDay)
            {
                List <Instrument> insts = new List <Instrument>();
                foreach (string market in this.config.Markets.Split(','))
                {
                    insts.AddRange(gmc.GetInstruments(market, "stock"));
                }
                TradeDataAccessor.StoreInstruments(insts).Wait();
                List <string> symbols = insts.Where(e => e.IsSuspended == false).Select(e => e.Symbol).ToList();
                Console.WriteLine("市场<{0}>今日开市证券:{1}只", config.Markets, symbols.Count);
                foreach (DataJobConfig dataJobConfig in config.DataJobConfigs)
                {
                    if (dataJobConfig.SubJobs != null && dataJobConfig.SubJobs.Count > 0)
                    {
                        List <IJob> jobQueue = new List <IJob>();
                        foreach (DataJobConfig subDataJobConfig in dataJobConfig.SubJobs)
                        {
                            int   i           = 0;
                            float weightTotal = 0;
                            foreach (DataCollector dataCollector in subDataJobConfig.DataCollectors)
                            {
                                weightTotal += dataCollector.Weight;
                                int      count      = (int)Math.Round(symbols.Count * weightTotal) - i;
                                object[] parameters = new object[] { dataCollector.MothedName, dataCollector.ClassName, symbols.GetRange(i, count), curDay };
                                i = i + count;
                                Type type = Type.GetType(subDataJobConfig.ClassName, (aName) => Assembly.LoadFrom(aName.Name),
                                                         (assem, name, ignore) => assem == null ? Type.GetType(name, false, ignore) : assem.GetType(name, false, ignore));
                                Job job = (Job)Activator.CreateInstance(type, parameters);
                                jobQueue.Add(job);
                            }
                        }
                        jobSche.Add(jobQueue, buildTrigger(dataJobConfig));
                    }
                    else
                    {
                        int   i           = 0;
                        float weightTotal = 0;
                        foreach (DataCollector dataCollector in dataJobConfig.DataCollectors)
                        {
                            weightTotal += dataCollector.Weight;
                            int      count      = (int)Math.Round(symbols.Count * weightTotal) - i;
                            object[] parameters = new object[] { dataCollector.MothedName, dataCollector.ClassName, symbols.GetRange(i, count), curDay };
                            i = i + count;
                            Type type = Type.GetType(dataJobConfig.ClassName, (aName) => Assembly.LoadFrom(aName.Name),
                                                     (assem, name, ignore) => assem == null ? Type.GetType(name, false, ignore) : assem.GetType(name, false, ignore));
                            Job job = (Job)Activator.CreateInstance(type, parameters);
                            jobSche.Add(job, buildTrigger(dataJobConfig), dataJobConfig.MaxTaskNumber);
                        }
                    }
                }
            }
            else
            {
                Console.WriteLine("今天不是交易日。");
            }

            return(true);
        }