async

Trabalhadores e tarefas assíncronas

Importação

_ <- fat.async

Tipos

A biblioteca async introduz dois tipos: Worker e Task

Worker

O Worker é um simples invólucro para uma operação assíncrona.

Construtor

Nome Assinatura Breve descrição
Worker (task: Method) Cria um Worker em modo de espera

Membros do protótipo

Nome Assinatura Breve descrição
start (): Worker Inicia a tarefa
cancel (): Void Cancela a tarefa
await (): Worker Aguarda pela conclusão da tarefa
isDone (): Boolean Verifica se a tarefa foi concluída
hasStarted Boolean Definido pelo método start
hasAwaited Boolean Definido pelo método await
isCanceled Boolean Definido pelo método cancel
result Any Definido pelo método await

Task

Uma Task representa uma operação assíncrona com tempo limitado. Ela usa dois Workers, um para a tarefa em si e outro para o temporizador de tempo limite.

Construtor

Nome Assinatura Breve descrição
Task (task: Method, wait: Number) Cria uma Task em modo de espera

O construtor Task leva dois argumentos:

  • task: O método a ser executado de forma assíncrona (o método pode não aceitar argumentos diretamente, mas você pode adicionar esses usando duas setas na definição -> ->).
  • wait (opcional): O tempo limite em milissegundos. Se a tarefa não terminar dentro desse tempo, ela será cancelada. O padrão é 40.000ms (40 segundos).

Membros do protótipo

Nome Assinatura Resumo
start (): Task Inicia a tarefa e seu temporizador
cancel (): Void Cancela a tarefa e seu temporizador
await (): Task Aguarda pela conclusão da tarefa ou timeout
isDone Boolean Definido true se a tarefa foi concluída
hasTimedOut Boolean Definido true se a tarefa excedeu o tempo
result Any Definido pelo método await

Método avulso

Nome Assinatura Breve descrição
selfCancel (): * Encerra a execução da thread

Notas de uso

As instâncias de Worker são mapeadas para threads do sistema em uma base um-para-um e são executadas conforme o agendamento do sistema. Isso implica que sua execução pode nem sempre ser imediata. Para aguardar o resultado de um Worker ou Task, use o método await.

Exemplos

_    <- fat.async
math <- fat.math
time <- fat.time

# Define uma tarefa lenta
slowTask = -> {
  waitTime = math.random * 5000  # Aguarda até 5 segundos
  time.wait(waitTime)
  waitTime
}

# Inicia a tarefa como Worker
worker = Worker(slowTask).start

# Obtém o resultado do worker
result1 = worker.await.result  # bloqueia até a tarefa ser concluída

# Inicia uma tarefa com timeout
task = Task(slowTask, 3000).start

# Obtém o resultado da tarefa
result2 = task.await.result  # bloqueia até a tarefa ser concluída ou ocorrer timeout

o método await da Task gera um AsyncError se a tarefa exceder o tempo antes da conclusão

Veja também

results matching ""

    No results matching ""