您的位置:首页 > 其它

使用CancellationTokenSource来取消Task

2015-02-25 15:11 399 查看
之前用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);

//});

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: