我正在制作一个调度程序,就像使用Quartz.Net的Windows Scheduler一样。
在Windows Scheduler中,如果花费的时间超过指定的时间,则有一个选项可以阻止任务运行。我必须在我的调度程序中实现相同的功能。
但是我找不到任何扩展方法/设置来相应地配置Trigger或Job。
我要求提供一些意见或建议。
最佳答案
您可以编写小的代码来设置在另一个线程上运行的自定义定时输出。实现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/