Files
Web_Faces_Prod/Face.SystemTask/JobBase.cs
2025-11-25 17:41:57 +08:00

96 lines
2.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using FluentScheduler;
using System.Web.Hosting;
using Face.Log4Net;
namespace Face.SystemTask
{
#region PlanJobBase IIS回收做处理
internal abstract class JobBase : IJob, IRegisteredObject
{
/// <summary>
/// 锁
/// </summary>
private readonly object _lock = new object();
/// <summary>
/// 是否已经在回收中
/// </summary>
private bool _shuttingDown;
/// <summary>
/// 初始化注册
/// </summary>
public JobBase()
{
HostingEnvironment.RegisterObject(this);
}
/// <summary>
/// 重写执行代码方法继承
/// </summary>
public abstract void Plan();
/// <summary>
/// 重写执行
/// </summary>
public void Execute()
{
try
{
lock (_lock)
{
if (_shuttingDown)
return;
Plan();//执行任务
}
}
finally
{
HostingEnvironment.UnregisterObject(this);
}
}
/// <summary>
/// 重写执行代码方法继承 带参数
/// </summary>
public virtual void Plan(params object[] obj) { }
/// <summary>
/// 重写执行 带参数
/// </summary>
public void Execute(params object[] obj)
{
try
{
lock (_lock)
{
if (_shuttingDown)
return;
Plan(obj);//执行任务
}
}
finally
{
HostingEnvironment.UnregisterObject(this);
}
}
/// <summary>
/// 回收调用
/// </summary>
/// <param name="immediate"></param>
public void Stop(bool immediate)
{
JobManager.RemoveAllJobs();//移除所有定时计划,防止秒级定时计划堆叠执行
Log4NetHelper.Log("调用stop" + DateTime.Now);
lock (_lock)
{
Log4NetHelper.Log("lock结束" + DateTime.Now);
_shuttingDown = true;
}
HostingEnvironment.UnregisterObject(this);
}
}
#endregion
}