我们先来看一下Salesforce当中有哪些异步处理方法:
1.Future 方法
运行在自己的线程当中,只有在系统资源可用的时候才会启动。如果你在一个trigger或者DML操作之后callout,你必须要用一个@future或者queueable方法。
Future方法必须是一个返回值为void的静态方法,参数类型必须是原始数据类型。在写对应的测试类时,需要把测试代码在包围在startTest和stopTest方法里面。
针对Future来说,如果对同一条数据操作,可能会造成锁的情况。
在VF controller里面是不可以用Future方法的。
不能在一个future方法里面去调用另一个future方法。
getContent 和 getContentAsPDF 方法不能被调用在future方法里面
2.Batch Apex
运行大量Job的时候和有些会达到处理限制的时候。
Batch class必须实现Batchable接口,这个接口里有三个方法,分别是start,execute,finish,其中start和finish方法当中只执行一次,所以在batch当中,DML操作,在start方法和finish方法中,要注意Salesforce的Limitation。execute方法中,每个trunk默认大小是200,你可以根据业务修改trunk的大小,但是trunk越小执行时间越长。
Batch Apex是典型的无状态。如果你要记录总共修改的记录,你需要实现Database.stateful来追踪其状态。
3.Queueable Apex
和Future方法相似,但是允许允许更复杂的数据类型和提供额外的Job Chaining。不同的点是Queueable可以接受非原始数据类型。还有就是Future方法更灵活,有时可以同步,有时可以异步。
在使用Chaining Jobs的时候,测试类里面必须使用Test.isRunningTest()规避。
在一个Transaction中最多有50个Job
4.Scheduled Apex
在特定时间去运行
Finally, CronTrigger 这个可以获取到异步类的信息。
网友评论