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
|
}
|
|
/// <summary>
|
/// 在应用程序关闭时被调用,用于执行清理操作和释放资源。在 ASP.NET Core 应用程序中,
|
/// 当主机关闭时,StopAsync 方法会被调用来停止后台服务,以确保服务能够正确地停止并释放它所占用的资源,比如关闭定时器、释放数据库连接等。
|
/// </summary>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
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);
|
}
|
}
|
|
/// <summary>
|
/// 在服务结束运行时,定时器得到正确地清理和释放
|
/// </summary>
|
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);
|
}
|
}
|
}
|
}
|