gpt4 book ai didi

asp.net - 配置 Quartz.Net 以在作业花费的时间超过指定时间跨度时停止执行作业

转载 作者:行者123 更新时间:2023-12-02 16:49:50 25 4
gpt4 key购买 nike

我正在制作一个调度程序,就像使用 Quartz.Net 的 Windows Scheduler 一样。

在 Windows Scheduler 中,有一个选项可以在任务花费超过指定时间时停止任务运行。我必须在我的调度程序中实现相同的功能。

但我找不到任何扩展方法/设置来相应地配置触发器或作业。

我请求一些意见或建议。

最佳答案

您可以编写小代码来设置在另一个线程上运行的自定义超时。实现 IInterruptableJob 接口(interface),并在作业应中断时从该线程调用其 Interrupt() 方法。您可以根据需要修改以下示例代码。请根据需要进行必要的检查/配置输入。

public class MyCustomJob : IInterruptableJob
{
private Thread runner;
public void Execute(IJobExecutionContext context)
{
int timeOutInMinutes = 20; //Read this from some config or db.
TimeSpan timeout = TimeSpan.FromMinutes(timeOutInMinutes);
//Run your job here.
//As your job needs to be interrupted, let us create a new task for that.
var task = new Task(() =>
{
Thread.Sleep(timeout);
Interrupt();
});

task.Start();
runner = new Thread(PerformScheduledWork);
runner.Start();
}

private void PerformScheduledWork()
{
//Do what you wish to do in the schedled task.

}

public void Interrupt()
{
try
{
runner.Abort();
}
catch (Exception)
{
//log it!

}
finally
{
//do what you wish to do as a clean up task.
}
}
}

关于asp.net - 配置 Quartz.Net 以在作业花费的时间超过指定时间跨度时停止执行作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24446215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com