119 lines
3.0 KiB
C#
119 lines
3.0 KiB
C#
using YLErp.Abstract;
|
|
|
|
namespace YLErp.Modules.TradeRiskCalcModule.TaskRunner
|
|
{
|
|
/// <summary>
|
|
/// 风险计算运行基类
|
|
/// </summary>
|
|
abstract class InnerRunnerBase
|
|
{
|
|
Task _task;
|
|
|
|
CancellationTokenSource _cancelSource;
|
|
|
|
/// <summary>
|
|
/// 是否运行中
|
|
/// </summary>
|
|
public bool IsRunning { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 开始时间
|
|
/// </summary>
|
|
public DateTime StartTime { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 结束时间
|
|
/// </summary>
|
|
public DateTime EndTime { get; private set; }
|
|
|
|
/// <summary>
|
|
/// 任务开始执行
|
|
/// </summary>
|
|
protected Task InnerStartTask(Action action)
|
|
{
|
|
IsRunning = true;
|
|
StartTime = DateTime.Now;
|
|
_cancelSource = new CancellationTokenSource();
|
|
return _task = Task.Run(action);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 任务执行完成
|
|
/// </summary>
|
|
protected void InnerCompleteTask()
|
|
{
|
|
lock (this)
|
|
{
|
|
IsRunning = false;
|
|
EndTime = DateTime.Now;
|
|
|
|
if (_cancelSource != null)
|
|
{
|
|
_cancelSource.Cancel();
|
|
_cancelSource.Dispose();
|
|
_cancelSource = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 任务取消执行
|
|
/// </summary>
|
|
public void CancelTask(int taskWaitSeconds)
|
|
{
|
|
lock (this)
|
|
{
|
|
if (_cancelSource != null)
|
|
{
|
|
_cancelSource.Cancel();
|
|
_cancelSource.Dispose();
|
|
_cancelSource = null;
|
|
}
|
|
|
|
if (taskWaitSeconds > 0)
|
|
{
|
|
_task?.Wait(taskWaitSeconds);
|
|
}
|
|
|
|
IsRunning = false;
|
|
EndTime = DateTime.Now;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 使用当前时间和开始时间做比较判断是否超时
|
|
/// </summary>
|
|
public bool IsTimeOut(int timeoutSeconds)
|
|
{
|
|
var nowTime = DateTime.Now;
|
|
|
|
return StartTime < nowTime && StartTime.AddSeconds(timeoutSeconds) < nowTime;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 开始执行任务
|
|
/// </summary>
|
|
public virtual void StartTask(InnerRunTaskData taskData)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
class InnerRunTaskData
|
|
{
|
|
public bool IsReady { get; set; }
|
|
|
|
public DateTime ValueDate { get; set; }
|
|
|
|
public DateTime PreSettleDate { get; set; }
|
|
|
|
public TradeDataSource TradeDataSource { get; set; }
|
|
|
|
public TradeRiskCalcDataProvider DataProvider { get; set; }
|
|
|
|
public IDataSource<Models.ManualRisk> ManualRiskProvider { get; set; }
|
|
|
|
public IDataSource<Models.ManualRisk> ManualRiskProviderHedge { get; set; }
|
|
}
|
|
}
|