using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using Utility.Tools; using Wms.Tools; using WMS.BLL.BllSoServer; using WMS.BLL.BllTransServer; using WMS.BLL.DataServer; using WMS.IBLL.IDataServer; namespace Wms { public class DailyTaskService : IHostedService, IDisposable { private Timer _timer; private Timer _timer2; private Timer _timer3; private string _wcsUrl; private string _agvUrl; private Timer _periodicReport; public DailyTaskService(string wcsUrl,string agvUrl) { _wcsUrl = wcsUrl; _agvUrl = agvUrl; } //创建定时任务 public Task StartAsync(CancellationToken cancellationToken) { TimeSpan delay = TimeSpan.FromMinutes(2); // 创建定时器,并设置回调函数 _timer = new Timer(ExecuteDailyTask, null, delay, TimeSpan.FromMinutes(5)); return Task.CompletedTask; } /// /// 在应用程序关闭时被调用,用于执行清理操作和释放资源。在 ASP.NET Core 应用程序中, /// 当主机关闭时,StopAsync 方法会被调用来停止后台服务,以确保服务能够正确地停止并释放它所占用的资源,比如关闭定时器、释放数据库连接等。 /// /// /// public Task StopAsync(CancellationToken cancellationToken) { // 停止定时器 _timer?.Change(Timeout.Infinite, 0); _periodicReport?.Change(Timeout.Infinite, 0); return Task.CompletedTask; } //执行任务逻辑 private void ExecuteDailyTask(object state) { try { HopperTransportServer _stockDetail = new HopperTransportServer(); //任务逻辑 _stockDetail.TransferBackTimer(_agvUrl); } catch (Exception ex) { var logStr = $@".\log\WMS\WMS定时任务" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; LogFile.SaveLogToFile($"WMS定时任务异常:( {ex.Message} ),", logStr); } } /// /// 在服务结束运行时,定时器得到正确地清理和释放 /// public void Dispose() { //释放资源 _timer?.Dispose(); _timer2?.Dispose(); _timer3?.Dispose(); _periodicReport?.Dispose(); } } }