Files
zszq-trs/YLErpDAL/Modules/TradeRiskCalcModule/TaskRunner/InnerRunnerBase.cs
T
2024-05-09 14:06:26 +08:00

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; }
}
}