using Newtonsoft.Json; using System.Threading; using YLErp; using YLErp.Abstract; using YLErp.BLL; using YLErp.BLL.Eod; using YLErp.Cache; using YLErp.Helpers; using YLErp.Model; using YLErp.Modules.SwapModule; namespace RealTimeCalcPositionService { public class Worker : IHostedService, IDisposable { private readonly IYcLogger _logger; private readonly CancellationTokenSource _cts = new CancellationTokenSource(); public Worker() { _logger = LogFactory.GetLogger("Worker"); } public Task StartAsync(CancellationToken cancellationToken) { _logger.Info($"实时预付金计算开始:{DateTimeOffset.Now}"); Task.Run(() => ExecuteTask(_cts.Token), _cts.Token); return Task.CompletedTask; } private void ExecuteTask(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { try { var tasks = new System.Threading.Tasks.Task[2]; tasks[0] = Task.Run(() => { RealtimePnlCalc.RiskCalc(); }); tasks[1] = Task.Run(() => { RealtimePnlCalc.CalcDMAMargin(); }); Task.WaitAll(tasks); } catch (Exception ex) { _logger.Error(ex, "实时预付金计算异常:" + ex.Message); } } } public async Task StopAsync(CancellationToken cancellationToken) { _logger.Info($"实时预付金计算停止: {DateTimeOffset.Now}"); _cts.Cancel(); await Task.CompletedTask; } public void Dispose() { _cts.Dispose(); } } }