Conhecimento Básico de Tarefas e Schedulers
O que é Processamento Síncrono?
O processamento síncrono é executado imediatamente na ordem em que o código é escrito e não prossegue para o próximo processo até que o processo anterior seja concluído.
Exemplo
ts
console.log('A');
console.log('B');
console.log('C');
// Saída:
// A
// B
// CO que é Processamento Assíncrono?
O processamento assíncrono é um processamento que não é executado imediatamente, mas é executado após a conclusão do processamento síncrono atual. O processamento assíncrono inclui "macro tasks" e "micro tasks".
Macro Task
- Uma tarefa que é executada no próximo ciclo do event loop.
- Exemplos:
setTimeout,setInterval, eventos do navegador
Exemplo de Execução
ts
console.log('Início');
setTimeout(() => console.log('Macro Task'), 0);
console.log('Fim');
// Saída:
// Início
// Fim
// Macro TaskSuporte RxJS
asyncScheduler- Usa
setTimeoutinternamente - Funciona como uma macro task
- Usa
ts
import { of, asyncScheduler } from 'rxjs';
import { observeOn } from 'rxjs';
of('Olá')
.pipe(observeOn(asyncScheduler))
.subscribe(console.log);
// Saída:
// OláMicro Task
- Uma tarefa que é executada imediatamente após a conclusão da tarefa atual, mas antes do início da próxima tarefa.
- Exemplos:
Promise.then,queueMicrotask
Exemplo de Execução
ts
console.log('Início');
Promise.resolve().then(() => console.log('Micro Task'));
console.log('Fim');
// Saída:
// Início
// Fim
// Micro TaskSuporte RxJS
asapScheduler- Usa
Promise.resolve().then()internamente - Funciona como uma microtask
- Usa
ts
import { of, asapScheduler } from 'rxjs';
import { observeOn } from 'rxjs';
of('Oi')
.pipe(observeOn(asapScheduler))
.subscribe(console.log);
// Saída:
// OiTarefa Síncrona
- Código normal a ser executado imediatamente.
Suporte RxJS
queueScheduler- Parece ser síncrono, mas permite controle fino através de enfileiramento de tarefas.
ts
import { of, queueScheduler } from 'rxjs';
import { observeOn } from 'rxjs';
of('Agora')
.pipe(observeOn(queueScheduler))
.subscribe(console.log);
// Saída:
// AgoraResumo da Ordem de Execução
Exemplo de Código
ts
console.log('1');
setTimeout(() => console.log('2 (setTimeout)'), 0);
Promise.resolve().then(() => console.log('3 (Promise)'));
console.log('4');
// Saída:
// 1
// 4
// 3 (Promise) 👈 Microtask
// 2 (setTimeout) 👈 MacrotaskTabela de Correspondência de Tarefas e Schedulers RxJS
| Tipo | Exemplo | Scheduler RxJS |
|---|---|---|
| Síncrono | Código normal | queueScheduler |
| Microtask | Promise.then, queueMicrotask | asapScheduler |
| Macrotask | setTimeout, setInterval | asyncScheduler |