017_异步处理_Queueable

Posted BandariFang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了017_异步处理_Queueable相关的知识,希望对你有一定的参考价值。


Queueable Apex: Batch 和 Future 的结合
Queueable Apex允许你提交类似于Future方法的异步处理作业,还具有以下附加优点:
Non-primitive types:你的Queueable类可以包含非原始数据类型的成员变量,例如sObjects或自定义Apex类型。当作业执行时,可以访问这些对象。
Monitoring:当通过调用System.enqueueJob方法提交作业时,该方法返回AsyncApexJob记录的ID。您可以使用此ID来标识作业,并通过“Apex作业”页面中的Salesforce用户界面监视作业进度,也可以通过从AsyncApexJob查询记录来通过编程方式进行监视。
Chaining jobs:通过从正在运行的作业启动第二个作业,可以将一个作业链接到另一个作业。如果需要执行一些顺序处理,链接作业很有用

模板:

public class SomeClass implements Queueable { 
    public void execute(QueueableContext context) {
        // awesome code here
    }
}

  

 

public class UpdateParentAccount implements Queueable {
    
    private List<Account> accounts;
    private ID parent;
    
    public UpdateParentAccount(List<Account> records, ID id) {
        this.accounts = records;
        this.parent = id;
    }

    public void execute(QueueableContext context) {
        for (Account account : accounts) {
          account.parentId = parent;
          // perform other processing or callout
        }
        update accounts;
    }
    
}

  

@isTest
public class UpdateParentAccountTest {

    @testSetup 
    static void setup() {
        List<Account> accounts = new List<Account>();
        // add a parent account
        accounts.add(new Account(name=‘Parent‘));
        // add 100 child accounts
        for (Integer i = 0; i < 100; i++) {
            accounts.add(new Account(
                name=‘Test Account‘+i
            ));
        }
        insert accounts;
    }
    
    static testmethod void testQueueable() {
        // query for test data to pass to queueable class
        Id parentId = [select id from account where name = ‘Parent‘][0].Id;
        List<Account> accounts = [select id, name from account where name like ‘Test Account%‘];
        // Create our Queueable instance
        UpdateParentAccount updater = new UpdateParentAccount(accounts, parentId);
        // startTest/stopTest block to force async processes to run
        Test.startTest();        
        System.enqueueJob(updater);
        Test.stopTest();        
        // Validate the job ran. Check if record have correct parentId now
        System.assertEquals(100, [select count() from account where parentId = :parentId]);
    }
    
}

  

以上是关于017_异步处理_Queueable的主要内容,如果未能解决你的问题,请参考以下文章

017_linux驱动之_信号量

YJX_Driver_017_需要具备的理论知识

ANDROID_MARS学习笔记_S01原始版_017_绑定SERVICE

算法笔记_017:递归执行顺序的探讨(Java)

_017_信号

dljd_017_使用PreparedStatement执行模糊查询