using YLErp.Abstract;
namespace YLErp.Modules.TradeRiskCalcModule.TaskRunner
{
///
/// 风险计算运行基类
///
abstract class InnerRunnerBase
{
Task _task;
CancellationTokenSource _cancelSource;
///
/// 是否运行中
///
public bool IsRunning { get; private set; }
///
/// 开始时间
///
public DateTime StartTime { get; private set; }
///
/// 结束时间
///
public DateTime EndTime { get; private set; }
///
/// 任务开始执行
///
protected Task InnerStartTask(Action action)
{
IsRunning = true;
StartTime = DateTime.Now;
_cancelSource = new CancellationTokenSource();
return _task = Task.Run(action);
}
///
/// 任务执行完成
///
protected void InnerCompleteTask()
{
lock (this)
{
IsRunning = false;
EndTime = DateTime.Now;
if (_cancelSource != null)
{
_cancelSource.Cancel();
_cancelSource.Dispose();
_cancelSource = null;
}
}
}
///
/// 任务取消执行
///
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;
}
}
///
/// 使用当前时间和开始时间做比较判断是否超时
///
public bool IsTimeOut(int timeoutSeconds)
{
var nowTime = DateTime.Now;
return StartTime < nowTime && StartTime.AddSeconds(timeoutSeconds) < nowTime;
}
///
/// 开始执行任务
///
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 ManualRiskProvider { get; set; }
public IDataSource ManualRiskProviderHedge { get; set; }
}
}