2016-07-07 1 views
1

Я пытаюсь выяснить, как заставить System.AbortJob() работать на самом деле. Мое предположение (может быть неверно) заключается в том, что когда я передаю текущую работу в System.AbortJob(), работа прекратится прямо там и прервется. Вот мой тест, который не работает, поскольку я вижу, что System.debug() отображается в моих журналах.System.AbortJob не работает?

Выполнение от выполнения анонимным:

queueableTest tst = new queueableTest(); 
System.enqueueJob(tst); 

Queueable класс:

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?');   
    } 

} 

Любая помощь/обратная связь с благодарностью!

ответ

2

Звонок System.abortJob() вступает в силу только после завершения контекста его выполнения. Поскольку вы вызываете abortJob из того же контекста, который вы хотите прервать, к моменту вступления в силу ваш код уже завершил выполнение, что делает вывод System.abortJob() неактуальным.

Если вы хотите прервать текущее задание, вам необходимо использовать return; или System.assert(false, 'Aborting');. В первом случае ваша работа завершится со статусом «Завершено», а во втором случае - с статусом «Сбой». Выброс исключения также имел бы тот же результат.