代码拉取完成,页面将自动刷新
Issue
,将无法得到答复。发生了什么?
在接口API中添加作业任务后,能正常启动运行,调用暂停,能暂停任务,但操作以下遇到了问题,没成功。
1、调用启动方法,任务未启动;
2、删除作业,重新添加也未启动,通过查询能看见任务是存在的;
3、更新任务也没更新成功,提示阻塞了【之前成功更新过,只是作业不是通过api添加】。
/// <summary>
/// 添加任务
/// </summary>
public void AddJob()
{
var jobBuilder = JobBuilder.Create<MyJob>().SetJobId("job_01").SetConcurrent(false).SetDescription("任务描述");
var triggerBuilder = Triggers.Period(5000).SetTriggerId("trigger_01").SetDescription("触发器描述");
_schedulerFactory.AddJob(jobBuilder, triggerBuilder);
}
/// <summary>
/// 更新任务
/// </summary>
public void UpdateDesc()
{
var scheduler = _schedulerFactory.GetJob("job_01");
var jobBuilder = scheduler.GetJobBuilder();
scheduler.UpdateDetail(jobBuilder.SetDescription("新的描述"));
}
/// <summary>
/// 暂停所有任务
/// </summary>
public void PauseAllJob()
{
_schedulerFactory.PauseAll();
}
/// <summary>
/// 启动所有任务
/// </summary>
public void StartAllJob()
{
_schedulerFactory.StartAll();
}
⚠⚠ 必须提供完整可运行且包含错误的
Git
仓库 DEMO,DEMO 提供最简单的错误逻辑代码,否则将无法得到答复。⚠⚠
期待的结果是?
收到,我一定好好测,现在,我先调整你的代码,我们再测试。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
private readonly ISystemService _systemService;
private readonly ISchedulerFactory _schedulerFactory;
public SystemAppService(ISystemService systemService, ISchedulerFactory schedulerFactory)
{
_systemService = systemService;
_schedulerFactory = schedulerFactory;
}
private readonly ISystemService _systemService;
private readonly ISchedulerFactory _schedulerFactory;
private IScheduler _scheduler; // 如果都是同一个作业就可以直接用了
public SystemAppService(ISystemService systemService, ISchedulerFactory schedulerFactory)
{
_systemService = systemService;
_schedulerFactory = schedulerFactory;
_schedulerFactory.TryGetJob("job_01", out _scheduler); // 如果都是同一个作业就可以直接用了
}
/// <summary>
/// 获取任务描述
/// </summary>
/// <returns></returns>
public string GetDesc()
{
var isExist = _schedulerFactory.ContainsJob("job_01");
if (isExist)
{
var scheduler = _schedulerFactory.GetJob("job_01");
return scheduler.GetJobBuilder().ConvertToJSON(NamingConventions.CamelCase).ToString();
}
return "NO";
}
/// <summary>
/// 获取任务描述
/// </summary>
/// <returns></returns>
public string GetDesc()
{
_ = _schedulerFactory.TryGetJob("job_01", out var scheduler);
return scheduler?.ConvertToJSON() ?? "NO";
}
第一点
之后还可以更简单/// <summary>
/// 获取任务描述
/// </summary>
/// <returns></returns>
public string GetDesc()
{
return _scheduler?.ConvertToJSON() ?? "NO";
}
/// <summary>
/// 添加任务
/// </summary>
public void AddJob()
{
var jobBuilder = JobBuilder.Create<MyJob>().SetJobId("job_01").SetConcurrent(false).SetDescription("任务描述");
var triggerBuilder = Triggers.Period(5000).SetTriggerId("trigger_01").SetDescription("触发器描述");
_schedulerFactory.AddJob(jobBuilder, triggerBuilder);
}
/// <summary>
/// 添加任务
/// </summary>
public void AddJob()
{
_schedulerFactory.AddJob(JobBuilder.Create<MyJob>()
.SetJobId("job_01")
.SetConcurrent(false)
.SetDescription("任务描述")
, Triggers.Period(5000)
.SetTriggerId("trigger_01")
.SetDescription("触发器描述"));
}
只是简化可读性。
/// <summary>
/// 更新任务
/// </summary>
public void UpdateDesc()
{
var scheduler = _schedulerFactory.GetJob("job_01");
var jobBuilder = scheduler.GetJobBuilder();
scheduler.UpdateDetail(jobBuilder.SetDescription("新的描述"));
}
/// <summary>
/// 更新任务
/// </summary>
public void UpdateDesc()
{
_ = _schedulerFactory.TryGetJob("job_01", out var scheduler);
var jobBuilder = scheduler?.GetJobBuilder()
?.SetDescription("新的描述");
scheduler?.UpdateDetail(jobBuilder);
}
第一点
/// <summary>
/// 更新任务
/// </summary>
public void UpdateDesc()
{
_ = _schedulerFactory.TryGetJob("job_01", out _scheduler);
var jobBuilder = _scheduler?.GetJobBuilder()
?.SetDescription("新的描述");
_scheduler?.UpdateDetail(jobBuilder);
}
只是简化可读性。
using Furion.Schedule;
using Job.Core;
namespace Job.Application;
/// <summary>
/// 系统服务接口
/// </summary>
public class SystemAppService : IDynamicApiController
{
private const string _jobId = "job_01";
private readonly ISystemService _systemService;
private readonly ISchedulerFactory _schedulerFactory;
private IScheduler _scheduler; // 如果都是同一个作业就可以直接用了
public SystemAppService(ISystemService systemService, ISchedulerFactory schedulerFactory)
{
_systemService = systemService;
_schedulerFactory = schedulerFactory;
_schedulerFactory.TryGetJob(_jobId, out _scheduler); // 如果都是同一个作业就可以直接用了
}
/// <summary>
/// 获取任务描述
/// </summary>
/// <returns></returns>
public string GetDesc()
{
return _scheduler?.ConvertToJSON() ?? "NO";
}
/// <summary>
/// 添加任务
/// </summary>
public void AddJob()
{
_schedulerFactory.AddJob(JobBuilder.Create<MyJob>()
.SetJobId(_jobId)
.SetConcurrent(false)
.SetDescription("任务描述")
, Triggers.Period(5000)
.SetDescription("触发器描述"));
}
/// <summary>
/// 更新任务
/// </summary>
public void UpdateDesc()
{
_ = _schedulerFactory.TryGetJob(_jobId, out _scheduler);
var jobBuilder = _scheduler?.GetJobBuilder()
?.SetDescription("新的描述");
_scheduler?.UpdateDetail(jobBuilder);
}
/// <summary>
/// 暂停所有任务
/// </summary>
public void PauseAllJob()
{
_schedulerFactory.PauseAll();
}
/// <summary>
/// 启动所有任务
/// </summary>
public void StartAllJob()
{
_schedulerFactory.StartAll();
}
/// <summary>
/// 删除任务
/// </summary>
public void DelJob()
{
_schedulerFactory.RemoveJob(_jobId);
}
/// <summary>
/// 暂停任务
/// </summary>
public void PauseJob()
{
_ = _schedulerFactory.TryGetJob(_jobId, out _scheduler);
_scheduler?.Pause();
}
/// <summary>
/// 启动任务
/// </summary>
public void StartJob()
{
_ = _schedulerFactory.TryGetJob(_jobId, out _scheduler);
_scheduler?.Start();
}
}
测试正常
更新成功了,但是任务执行一次后停止执行了,不正常。
暂停和启动也可以吗
测试通过
启动成功,但是没能接着执行,测试失败
这个地方的状态是不是没对,前面两步都对,第三步暂停后启动,感觉不应该是1就绪状态,应该是2才对。
测试成功
测试成功
测试成功
/// <summary>
/// 暂停触发器
/// </summary>
public void PauseTrigger()
{
_scheduler.PauseTrigger(_triggerId);
}
/// <summary>
/// 启动触发器
/// </summary>
public void StartTrigger()
{
_scheduler.StartTrigger(_triggerId);
}
顺便看下这个,暂停后启动也未运行
升级后替换你的代码为:
using Furion.Schedule;
using Job.Core;
namespace Job.Application;
/// <summary>
/// 系统服务接口
/// </summary>
public class SystemAppService : IDynamicApiController
{
private const string _jobId = "job_01";
private readonly ISystemService _systemService;
private readonly ISchedulerFactory _schedulerFactory;
private IScheduler _scheduler; // 如果都是同一个作业就可以直接用了
public SystemAppService(ISystemService systemService, ISchedulerFactory schedulerFactory)
{
_systemService = systemService;
_schedulerFactory = schedulerFactory;
_schedulerFactory.TryGetJob(_jobId, out _scheduler); // 如果都是同一个作业就可以直接用了
}
/// <summary>
/// 获取任务描述
/// </summary>
/// <returns></returns>
public string GetDesc()
{
return _scheduler?.ConvertToJSON() ?? "NO";
}
/// <summary>
/// 添加任务
/// </summary>
public void AddJob()
{
_schedulerFactory.AddJob(JobBuilder.Create<MyJob>()
.SetJobId(_jobId)
.SetConcurrent(false)
.SetDescription("任务描述")
, Triggers.Period(5000)
.SetDescription("触发器描述"));
}
/// <summary>
/// 更新任务
/// </summary>
public void UpdateDesc()
{
_ = _schedulerFactory.TryGetJob(_jobId, out _scheduler);
var jobBuilder = _scheduler?.GetJobBuilder()
?.SetDescription("新的描述");
_scheduler?.UpdateDetail(jobBuilder);
}
/// <summary>
/// 暂停所有任务
/// </summary>
public void PauseAllJob()
{
_schedulerFactory.PauseAll();
}
/// <summary>
/// 启动所有任务
/// </summary>
public void StartAllJob()
{
_schedulerFactory.StartAll();
}
/// <summary>
/// 删除任务
/// </summary>
public void DelJob()
{
_schedulerFactory.RemoveJob(_jobId);
}
/// <summary>
/// 暂停任务
/// </summary>
public void PauseJob()
{
_ = _schedulerFactory.TryGetJob(_jobId, out _scheduler);
_scheduler?.Pause();
}
/// <summary>
/// 启动任务
/// </summary>
public void StartJob()
{
_ = _schedulerFactory.TryGetJob(_jobId, out _scheduler);
_scheduler?.Start();
}
}
登录 后才可以发表评论