Skip to main content

Noções básicas de processamento assíncrono

Objetivos de aprendizagem

Após concluir esta unidade, você estará apto a:
  • Explicar a diferença entre o processamento síncrono e assíncrono.
  • Escolher o tipo de Apex assíncrono para usar em diversos cenários.

Apex assíncrono

Resumindo, o Apex assíncrono é usado para executar processos em um thread separado, posteriormente.

Um processo assíncrono é um processo ou função que executa uma tarefa “em segundo plano”, sem que o usuário precise esperar que a tarefa termine.

Aqui está um exemplo prático: Digamos que você tenha uma lista de coisas para fazer antes de sua aula de dança semanal. Seu carro está fazendo um barulho estranho, você precisa de um gel para cabelos de outra cor e você tem de pegar seu uniforme na casa de sua mãe. Você pode levar seu carro ao mecânico e aguardar até que ele seja consertado antes de fazer as outras coisas em sua lista (processamento síncrono), ou você pode deixá-lo lá, fazer as outras coisas, e pedir para a oficina informar quando ele estiver pronto (processamento assíncrono). Se você quiser estar em casa a tempo de passar seu spandex antes da aula, o processamento assíncrono permite que você faça mais coisas com o mesmo tempo sem a espera desnecessária.

Você normalmente usa o Apex assíncrono para callouts a sistemas externos, operações que exigem limites maiores e códigos que precisam ser executados em um determinado horário. Entre os principais benefícios do processamento assíncrono, estão:

Eficiência do usuário

Digamos que você tenha um processo que faz muitos cálculos sobre um objeto personalizado sempre que uma oportunidade é criada. O tempo necessário para executar estes cálculos pode variar de um pequeno incômodo a um bloqueador de produtividade para o usuário. Como estes cálculos não afetam o que o usuário está fazendo no momento, fazer com que ele aguarde por um longo processo de execução não é um uso eficiente de seu tempo. Com o processamento assíncrono o usuário pode continuar com seu trabalho, o processamento pode ser feito em segundo plano e o usuário pode ver os resultados quando for mais conveniente.

Escalabilidade

Ao permitir que alguns recursos da plataforma sejam executados quando os recursos se tornarem disponíveis em algum momento no futuro, os recursos podem ser gerenciados e escalonados rapidamente. Isto permite que a plataforma lide com mais trabalhos usando o processamento paralelo.

Limites mais elevados

Processos assíncronos são iniciados em um novo thread, com limites de administrador e de execução mais elevados. E, para ser honesto, quem não quer limites de administrador e de execução mais elevados?


O Apex assíncrono oferece diversas opções. Entraremos em mais detalhes sobre cada uma delas em breve, mas aqui está uma visão geral de alto nível.

Tipo Visão geral Cenários comuns
Métodos futuros Se executa em seu próprio thread e não é iniciado até que os recursos estejam disponíveis. Callout de serviço da Web.
Apex em lote Executa grandes trabalhos que excederiam os limites normais de processamento. Limpeza de dados ou arquivamento de registros.
Queueable Apex Similar aos métodos futuros, mas fornece encadeamento de trabalho adicional e permite o uso de tipos de dados mais complexos. Realização de operações de processamento sequencial com serviços da Web externos.
Apex agendado Agenda o Apex para ser executado em um tempo especificado. Tarefas diárias ou semanais.

Também é interessante notar que estes diferentes tipos de operações assíncronas não são mutuamente exclusivas. Por exemplo, um padrão comum é iniciar um trabalho Apex de lote a partir de um trabalho Apex agendado.

Acompanhar com o Trail Together

Deseja acompanhar um instrutor enquanto trabalha nesta etapa? Veja este vídeo que faz parte da série Trail Together no Trailhead Live. Na seção Recursos, há um link para acessar a seção completa. 

Limites de administrador e execução aumentados

Um dos principais benefícios de executar o Apex assíncrono são os limites de administrador e de execução mais elevados. Por exemplo, o número de consultas SOQL passa de 100 para 200 consultas ao usar chamadas assíncronas. O tamanho de heap total e o tempo máximo da CPU também são maiores para chamadas assíncronas.

Você não só obtém limites maiores com a chamada assíncrona, mas também os limites de administrador são independentes dos limites na solicitação síncrona que colocou a solicitação assíncrona na fila inicialmente. Estamos exagerando, mas, essencialmente, você tem duas invocações Apex separadas e mais que o dobro da capacidade de processamento. Isto é útil para instâncias nas quais você quer fazer o máximo de processamento possível na transação atual, mas quando você começa a se aproximar dos limites de administrador, continua de forma assíncrona.

Se você gosta de ler sobre tamanhos de heap, tempos máximos de execução e limites em geral, consulte Administradores e limites de execução para obter mais detalhes interessantes.

Como funciona o processamento assíncrono

O processamento assíncrono, em um ambiente multilocatário, apresenta alguns desafios:

Garanta a equidade de tratamento

Garanta que cada cliente receba uma parte justa dos recursos de processamento.

Garanta a tolerância a falhas

Garanta que nenhuma solicitação assíncrona seja perdida devido a falhas de equipamento ou de software.

A plataforma usa uma estrutura de processamento assíncrono baseada em filas. Esta estrutura é usada para gerenciar solicitações assíncronas para diversas organizações dentro de cada instância. O ciclo de vida da solicitação é composto de três partes:

Colocar na fila

A solicitação é colocada na fila. Isso pode ser uma solicitação de lote Apex, solicitação de Apex futuro ou uma de várias outras. A plataforma colocará as solicitações na fila junto com os dados adequados para processar a solicitação.

Persistência

A solicitação colocada na fila é persistente. As solicitações são armazenadas na área de armazenamento persistente para recuperação de falhas e para fornecer capacidades transacionais.

Retirar da fila

A solicitação é retirada da fila e processada. Se o processamento falhar, o controle de transações garantirá que as solicitações não sejam perdidas.

Cada solicitação é processada por um manipulador. O manipulador é o código que realiza funções para um tipo de solicitação específico. Manipuladores são executados por um número finito de threads de trabalho em cada um dos servidores de aplicação que compõem uma instância. A solicitação de threads funciona a partir da estrutura de fila e, quando recebida, inicia um manipulador específico para realizar o trabalho.

Conservação de recursos

O processamento assíncrono tem menor prioridade que a interação em tempo real através do navegador e de API. Para garantir que haja recursos suficientes para lidar com um aumento de recursos de computação, a estrutura de enfileiramento monitora os recursos do sistema, como a memória do servidor e o uso da CPU, e reduz o processamento assíncrono quando os limites são excedidos. Esta é uma forma sofisticada de dizer que o sistema multilocatário se protege. Se uma organização tentar “abocanhar” mais recursos do que está reservado para ela, o processamento assíncrono é suspenso até que seja alcançado um limite normal. O resultado disso é que não há garantia quanto ao tempo de processamento, mas no final, tudo funcionará.

Compartilhe seu feedback do Trailhead usando a Ajuda do Salesforce.

Queremos saber sobre sua experiência com o Trailhead. Agora você pode acessar o novo formulário de feedback, a qualquer momento, no site Ajuda do Salesforce.

Saiba mais Continue compartilhando feedback