每五秒重新调用 Queueable方法
global class AccountQueueable implements Queueable
{
private Account account;
private Integer countnum;
/*
第一个参数客户信息
第二个参数计数参数,执行到10次结束Queueable
*/
public AccountQueueable(Account acc,Integer num)
{
this.account = acc;
this.countnum = num;
}
global void execute(QueueableContext context)
{
try
{
upsert this.account;
}
catch(Exception e)
{
if(countnum <= 10)
{
sleep(5000);
}
}
}
/*
程序睡眠 每5秒触发一次
参数: 毫秒
*/
private void sleep(integer milliseconds)
{
Long timeDiff = 0;
DateTime firstTime = System.now();
do
{
timeDiff = System.now().getTime() - firstTime.getTime();
}
while(timeDiff <= milliseconds);
System.enqueueJob(new AccountQueueable(this.account,countnum++));
}
}
将类添加到队列当中
ID jobID = System.enqueueJob(new AsyncExecutionExample());
监控 Queueable状态
AsyncApexJob jobInfo = [SELECT Status,NumberOfErrors FROM AsyncApexJob WHERE Id=:jobID];
测试类
@isTest
public class AsyncExecutionExampleTest {
static testmethod void test1() {
// startTest/stopTest block to force async processes
// to run in the test.
Test.startTest();
System.enqueueJob(new AsyncExecutionExample());
Test.stopTest();
// Validate that the job has run
// by verifying that the record was created.
// This query returns only the account created in test context by the
// Queueable class method.
Account acct = [SELECT Name,Phone FROM Account WHERE Name='Acme' LIMIT 1];
System.assertNotEquals(null, acct);
System.assertEquals('(415) 555-1212', acct.Phone);
}
}