胶料快检添加离线模式
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
using YY.Admin.Core;
|
||||
|
||||
namespace YY.Admin.Services.Service;
|
||||
|
||||
/// <summary>
|
||||
/// 胶料快检相关 MES 只读数据(实验标准、密炼计划)专用轮询管理器。
|
||||
/// </summary>
|
||||
public class MesQuickTestDataPollManager : ISingletonDependency
|
||||
{
|
||||
public static readonly TimeSpan PollInterval = TimeSpan.FromSeconds(2);
|
||||
|
||||
private readonly List<(string Name, Func<Task> Task)> _tasks = [];
|
||||
private readonly Timer _timer;
|
||||
private readonly ILoggerService _logger;
|
||||
private volatile bool _tickRunning;
|
||||
|
||||
public MesQuickTestDataPollManager(ILoggerService logger)
|
||||
{
|
||||
_logger = logger;
|
||||
_timer = new Timer(OnTick, null, PollInterval, PollInterval);
|
||||
_logger.Information($"[快检数据轮询] 已启动,间隔 {PollInterval.TotalSeconds} 秒");
|
||||
}
|
||||
|
||||
public void Register(string name, Func<Task> pollTask)
|
||||
{
|
||||
lock (_tasks)
|
||||
_tasks.Add((name, pollTask));
|
||||
_logger.Information($"[快检数据轮询] 注册任务: {name}");
|
||||
}
|
||||
|
||||
private void OnTick(object? _)
|
||||
{
|
||||
if (_tickRunning) return;
|
||||
|
||||
_ = Task.Run(async () =>
|
||||
{
|
||||
if (_tickRunning) return;
|
||||
_tickRunning = true;
|
||||
try
|
||||
{
|
||||
List<(string Name, Func<Task> Task)> snapshot;
|
||||
lock (_tasks) snapshot = [.. _tasks];
|
||||
|
||||
foreach (var (name, task) in snapshot)
|
||||
{
|
||||
try
|
||||
{
|
||||
await task().ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Warning($"[快检数据轮询] 任务 [{name}] 异常: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
_tickRunning = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user