前言
Salesforce并没有提供直接的Thread管理(平台安全和稳定大于山哈)。但是提供了几种异步或者说不在同一Transaction的内置方式:Schedule、Batchable、Queueable和Future Method。在此前的篇幅中有聊过Schedule类似于JAVA中的Timer,是一种定时调度;Batchable是占用长时间去运行批量数据。那么Queueable和Future是我们在程序中更频繁使用的一种异步方式。
介绍
- Queueable:可以控制Apex异步执行进度,并且可以将作业增加到队列中并实施监控,同时可以在运行期间部分限制上限比一般Apex Class要高。相对于Future方式而言,更可靠(保障结果输出,在调用后不会delay)
- Future:一种异步调用方式,有自己的线程不和主线程混用。可以在运行期间提高部分限制上限(默认与一般Apex Class相同)。通常使用场景为避免DML操作和CallOut操作混合在一起(会抛出DML Error)。需要说明的是Future方式并不保证运行结果(调用后可能delay),Future一旦执行后就脱离主线程进入到自己的线程(数据不共享),不提供管控的方式。
总体而言:Queueable和Future是非常类似的,但是又增强了部分功能:提供管理和监控、实施链式作业和参数不同。Future方式的参数只允许为基础类型(例如String,Boolean等),object无法作为参数;Queueable可以使用object作为参数(准确的讲是在执行时允许object进入,这个位置不太好说)。
案例说明
- Queueable
public class AsyncExecutionExamp