1.Future Methods详细介绍
Future Apex用于在系统资源可用时在单独的线程中运行进程。
注意:从技术上讲,您可以使用@future注释来标识异步运行的方法。
然而,因为“用@future注释标识的方法”很费劲,所以它们通常被称为“future方法”,这就是我们在本模块剩余部分中引用它们的方式。
当使用同步处理时,所有方法调用都是从执行Apex代码的同一线程进行的,并且在该过程完成之前,不能进行任何额外的处理。
您可以对任何希望在其自己的线程中异步运行的操作使用future方法。
这样做的好处是不会阻止用户执行其他操作,并为流程提供更高的调控器和执行限制。
通过异步处理,每个人都是赢家。
future方法通常用于:
外部Web服务的调用:如果要从触发器调用或在执行DML操作后调用,则必须使用future或queueable方法。trigger中的调用将在调用的生存期内保持数据库连接打开,这在多租户环境中是“no-no”。
当时间允许时,您希望在自己的线程中运行的操作:例如某种资源密集型计算或记录处理。
隔离不同sObject类型上的DML操作以防止混合DML错误:这是一种边缘情况,但您可能偶尔会遇到此问题。有关更多详细信息,请参阅不能在DML操作中一起使用的对象。
2.Future方法语法
未来的方法必须是静态方法,并且只能返回void类型。
指定的参数必须是基本数据类型、基本数据类型数组或基本数据类型集合。
值得注意的是,未来的方法不能将标准或自定义对象作为参数。
一种常见的模式是向方法传递一个要异步处理的记录ID列表。
global class SomeClass {
@future
public static void someFutureMethod(List<Id> recordIds) {
List<Account> accounts = [Select Id, Name from Account Where Id IN :recordIds];
//处理Account记录来做一些事情
}
}
对象不能作为参数传递给将来的方法的原因是,对象可以在调用方法的时间和