使用CancellationTokenSource来取消Task

 之前用quartz的调度进度的由于无法精确到间隔毫秒级,自己写了个任务来实现这个用来抓取股票行情和期货行情数据,永远是stock populate 很多,option populate很慢,那就写两个task来实现吧,但是却无法像cronmarker来设定某分某秒来跑,用windows的任务呢又不方便,因为这个是做成服务放在quartz的那个类一起的,所以。。。,下面贴代码:
  public void Start()
        {


             DateTime G_DateTime;
           
             Thread P_th = new Thread(
                 () =>
                 {
                         CancellationTokenSource ctsOption = new CancellationTokenSource(); 
                             CancellationTokenSource ctsStock = new CancellationTokenSource();
                     while (true)
                     {
                         G_DateTime = DateTime.Now;
                         TimeSpan P_TimeSpan = G_DateTime - DateTime.Today;
                         if (P_TimeSpan.TotalHours >= 9 && P_TimeSpan.TotalHours <= 16)
                         {
                             Logger.Debug("system's current Date & Time:" + P_TimeSpan.Hours + ":" + P_TimeSpan.Minutes + ":" + P_TimeSpan.Seconds);
                             ThreadPopulateOptionsQuotes(ctsOption.Token);
                             ThreadPopulateStockQuotes(ctsStock.Token);
                            
                             if (tPopulateOptionsQuotes.Status == TaskStatus.Created)
                             {
                                 tPopulateOptionsQuotes.Start();
                                 tPopulateStockQuotes.Start();
                             }
                         }
                         else
                         {
                             ctsOption.Cancel();
                             ctsStock.Cancel();
                         }
                         Thread.Sleep(60000);
                     }
                 });


             P_th.IsBackground = true;
             P_th.Start();
            
           
        }




        public void ThreadPopulateOptionsQuotes(CancellationToken token)
        {


            tPopulateOptionsQuotes = new Task(() =>
            {
                Logger.Debug("PopulateRealTimeOptionsQuotes Start……");


                while (true)
                {
                    if (!token.IsCancellationRequested)
                    {
                        Stopwatch stopwatch = new Stopwatch();
                        stopwatch.Start();
                        _marketDataPopulatorService.PopulateRealtimeOptionsQuotes();
                        stopwatch.Stop();
                        Logger.Info("PopulateRealTimeOptionsQuotes cost: " + stopwatch.ElapsedMilliseconds + " ms");
                        //Thread.Sleep(200);
                    }
                    else { Logger.Info("Manipulation regarding Populate Options Quotes has been cancelled "); }
                }


            });
          
            //tPopulateOptionsQuotes.ContinueWith((task) =>
            //{
            //    Logger.Debug("PopulateRealTimeQuotes Complete……");
            //    Logger.Debug("IsCanceled=" + task.IsCanceled + "IsCompleted=" + task.IsCompleted + "IsFaulted" + task.IsFaulted);


            //});


          


        }


        public void ThreadPopulateStockQuotes(CancellationToken token)
        {
             tPopulateStockQuotes = new Task(() =>
            {
                Logger.Debug("PopulateRealTimeStocksQuotes Start……");


                while (true)
                {
                    if (!token.IsCancellationRequested)
                    {
                        Stopwatch stopwatch = new Stopwatch();
                        stopwatch.Start();
                        _marketDataPopulatorService.PopulateRealtimeStocksQuotes();
                        stopwatch.Stop();
                        Logger.Info("PopulateRealTimeStocksQuotes:" + stopwatch.ElapsedMilliseconds);
                        //Thread.Sleep(200);
                    }
                    else { Logger.Info("Manipulation regarding Populate Stock Quotes has been cancelled "); }
                }


            });
            
            //tPopulateStockQuotes.ContinueWith((task) =>
            //{


            //    Logger.Debug("PopulateRealTimeStocksQuotes Complete……");
            //    Logger.Debug("IsCanceled=" + task.IsCanceled + "IsCompleted=" + task.IsCompleted + "IsFaulted" + task.IsFaulted);
            //});
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值