我正在试图找出如何使System.AbortJob()实际工作。我的假设(可能是错误的)是当我将当前jobId传递给System.AbortJob()时,作业将在那里停止并中止。这是我的测试不起作用,因为我看到System.debug()出现在我的日志中。
执行执行匿名:
queueableTest tst = new queueableTest();
System.enqueueJob(tst);
Queueable class:
public class queueableTest implements Queueable {
public static void execute(QueueableContext Context)
{
ID jobID = Context.getJobId();
System.AbortJob(jobID);
shouldntExecute();
}
public static void shouldntExecute()
{
System.debug('Why is this executing?');
}
}
非常感谢任何帮助/反馈!
答案 0 :(得分:3)
System.abortJob()
调用仅在执行上下文完成后生效。由于您从要中止的相同上下文中调用abortJob,因此当它生效时,您的代码已经完成执行,这使得System.abortJob()
调用无关紧要。
如果您要中止当前作业,则需要使用return;
或System.assert(false, 'Aborting');
在第一种情况下,您的作业将以“已完成”状态终止,并且第二种情况是'失败'状态。抛出异常也会产生相同的结果。