using Microsoft.Extensions.Hosting;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Utility.Tools;
using WMS.BLL.DataServer;
using WMS.IBLL.IDataServer;
namespace Wms
{
public class DailyTaskService : IHostedService, IDisposable
{
private Timer _periodicReport;
private IStockInfoServer _stock;
public DailyTaskService(IStockInfoServer stock)
{
_stock = stock;
}
//创建定时任务
public Task StartAsync(CancellationToken cancellationToken)
{
#region 每天0点执行
//计算距离下一个 0 点的时间间隔
DateTime now = DateTime.Now;
DateTime nextZeroHour = now.AddDays(1).Date;
TimeSpan delay = nextZeroHour - now;
//创建定时器,并设置回调函数
_periodicReport = new Timer(PeriodicReport, null, delay, TimeSpan.FromDays(1));
return Task.CompletedTask;
#endregion
#region 2分钟执行1次
/*// 计算距离下一个 2 分钟的时间间隔
TimeSpan delay = TimeSpan.FromMinutes(2);
// 创建定时器,并设置回调函数
_timer = new Timer(ExecuteDailyTask, null, delay, TimeSpan.FromMinutes(2));
return Task.CompletedTask;*/
#endregion
}
///
/// 在应用程序关闭时被调用,用于执行清理操作和释放资源。在 ASP.NET Core 应用程序中,
/// 当主机关闭时,StopAsync 方法会被调用来停止后台服务,以确保服务能够正确地停止并释放它所占用的资源,比如关闭定时器、释放数据库连接等。
///
///
///
public Task StopAsync(CancellationToken cancellationToken)
{
// 停止定时器
_periodicReport?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
}
//定时执行周期报表
private void PeriodicReport(object state)
{
try
{
var arr = _stock.ByDayInsertStock();
var logStr = $@".\log\WMS\WMS定时任务" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
LogFile.SaveLogToFile($"WMS定时任务执行异常:{arr},", logStr);
//释放资源
_periodicReport?.Dispose();
}
catch (Exception ex)
{
var logStr = $@".\log\WMS\WMS定时任务" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
LogFile.SaveLogToFile($"WMS定时任务执行异常:{DateTime.Now}:( {ex.Message} ),", logStr);
}
}
///
/// 在服务结束运行时,定时器得到正确地清理和释放
///
public void Dispose()
{
try
{
var logStr = $@".\log\WMS\WMS定时任务" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
LogFile.SaveLogToFile($"测试是否自动释放:{DateTime.Now}", logStr);
//释放资源
_periodicReport?.Dispose();
}
catch (Exception ex)
{
var logStr = $@".\log\WMS\WMS定时任务" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
LogFile.SaveLogToFile($"测试是否自动释放异常:{DateTime.Now}:( {ex.Message} ),", logStr);
}
}
}
}