之前用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);
//});
}
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);
//});
}