课程章节介绍
同学们,今天咱们来聊聊Salesforce Apex里一个挺重要的概念——,延续,,也就是Continuation。你可以把它想象成:当你的代码需要等一个外部服务慢慢响应的时候,不用在那儿傻等,而是先挂起,等响应回来了再接着跑。这种异步处理模式就叫“延续”。
但是呢,执行延续的时候,有一些专门的限制要记住,和我们平时写Apex的限制不太一样。咱们一条条来看。
---
,第一,并行调用的数量最多3个。,
啥意思呢?就是在同一个延续里,你同时发起的异步请求不能超过3个。比如你要同时调三个外部API,可以;调第四个就不行了。这是为了控制并发,避免资源被占满。
,第二,链接调用最多3个。,
链接调用就是,你收到第一次响应后,又在回调里马上发起第二个延续,第二个完了又发第三个……这种串起来的链,深度最多只能有3层。超过3个链接,平台就不干了。
,第三,超时时间强制为120秒。,
你要注意,就算你在代码里给HttpRequest设了超时时间,或者用自动生成的“桩”(stub),Salesforce都会直接忽略你设的时间,统一用120秒作为上限。要是外部服务120秒还没响应,延续就会被终止,超时啦。所以别指望能等太久。
,第四,队列状态大小最大80KB。,
延续在“暂停”等待时,需要保存一些状态数据,比如说你传进来的参数呀、一些变量的值呀。这些数据序列化后不能超过80KB,不然就存不下。
,第五,HTTP响应大小最大1MB。,
哪怕外部服务返回给你一个很大的报文,只要超过1MB,延续就会报错。所以对接的外部服务最好能返回精简的数据。
,第六,Post表单大小最大1MB。,
如果你用POST方式发送表单数据,body部分不能超过1MB。
,第七,Post表单里的键(key)最多500个。,
表单里字段名太多也不行,键的数量限制在500个以内。这基本是防止提交的表单过于庞大。
---
另外还有个小技巧:,如果你有一些变量不想被序列化到延续的状态里,可以用 `transient` 这个修饰符。,
加了 `transient`,这个变量就不会被保存在80KB的状态里,等延续恢复执行时,它的值会是null,需要重新获取或计算。这样能帮你节省那宝贵的80KB配额。
那等延续返回,请求恢复执行时,发生了什么变化呢?
这时候Salesforce会开启一个全新的Apex事务,之前的所有Apex和Visualforce限制都会被,重置,,就像全新的执行上下文一样。所以你在回调里写代码时,又有一整套新的限制额度可以用,但同时也要遵守这些新限制,不能“超支”。
咱们简单总结一下要点:
- 并行不超过3个,链式调用不超过3层。
- 强制120秒超时,外部响应别超1MB。
- 状态保存最多80KB,考虑用`transient`瘦身。
- 表单POST大小和键的数量也都有限制。
- 回调里一切限制重新开始。
记住这些,写延续的时候心里就有数啦,能避免不少莫名其妙的错误。好了,这节课的内容就是这些,有什么问题咱们可以再讨论。
关键词
Apex
Salesforce
Developer Guide