using Ayay.SerilogLogs; using Microsoft.Extensions.Hosting; using Serilog; using SHH.CameraSdk; /// /// 设备管理服务引擎 Worker /// public class CameraEngineWorker : BackgroundService { private readonly CameraManager _manager; public CameraEngineWorker(CameraManager manager) { // 理由:严谨性检查,防止因配置错误导致的空指针崩溃 _manager = manager ?? throw new ArgumentNullException(nameof(manager)); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { var sysLog = Log.ForContext("SourceContext", LogModules.Core); sysLog.Information("[Engine] 正在启动设备管理服务引擎..."); try { // 1. 理由:启动 SDK 内部加载流程(从本地存储恢复设备) await _manager.StartAsync(); sysLog.Warning("[Engine] 设备管理服务引擎已启动..."); } catch (Exception ex) { sysLog.Error($"[Engine] 设备管理服务引擎启动异常: {ex.Message}"); return; // 理由:核心组件失败,终止后续逻辑 } // 2. 理由:Worker 必须保持活跃状态,以便作为宿主生命周期的一部分 while (!stoppingToken.IsCancellationRequested) { // 你可以在这里定期输出一些状态统计 sysLog.Debug($"[Engine] 管理设备数: {_manager.GetAllCameras().Count()}"); await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken); } } public override async Task StopAsync(CancellationToken cancellationToken) { var sysLog = Log.ForContext("SourceContext", LogModules.Core); sysLog.Debug($"[Engine] 正在执行优雅停机: {_manager.GetAllCameras()}"); try { // 理由:这是重构的核心。必须在 SDK 退出前释放所有非托管句柄 await _manager.DisposeAsync(); } finally { await base.StopAsync(cancellationToken); } } }