⚡ Biblioteca: Filamento

Execute tarefas em paralelo sem bloquear o programa principal!

🔄

O que é programação assíncrona?

Normalmente, seu programa executa uma linha de cada vez. Com assíncrono, você pode iniciar tarefas que rodam "ao mesmo tempo" sem esperar elas terminarem. Perfeito para operações que demoram, como baixar arquivos ou processar dados grandes.

Diferença de tarefas: "Tarefas" é um conceito geral de operações assíncronas (como promises em outras linguagens). Esta biblioteca implementa tarefas assíncronas usando corrotinas leves, permitindo execução concorrente sem threads pesadas.

Iniciando uma tarefa assíncrona

filamento.tarefa(função()
    exiba("Esta tarefa roda em paralelo!")
    filamento.durma(1000)  -- Espera 1 segundo
    exiba("Tarefa terminou!")
fim)

exiba("Programa principal continua...")

Iniciando o loop de eventos

Para que as tarefas assíncronas sejam executadas, você precisa iniciar o loop de eventos:

filamento.inicie_loop()
O loop de eventos é como um "gerente" que coordena todas as tarefas assíncronas. Ele roda até todas as tarefas terminarem.

Exemplo: Download simulado

exiba("Iniciando downloads...")

filamento.tarefa(função()
    exiba("📥 Baixando arquivo 1...")
    filamento.durma(2000)
    exiba("✅ Arquivo 1 baixado!")
fim)

filamento.tarefa(função()
    exiba("📥 Baixando arquivo 2...")
    filamento.durma(1500)
    exiba("✅ Arquivo 2 baixado!")
fim)

exiba("Aguardando downloads...")
filamento.inicie_loop()
exiba("Todos os downloads terminaram!")
Lembre-se de chamar filamento.inicie_loop() no final para executar as tarefas!

Exemplo: Simulando tarefas com callbacks

Embora não haja uma biblioteca "tarefa" separada, você pode simular tarefas assíncronas usando corrotinas e callbacks:

função tarefa_simulada(acao, callback)
    filamento.tarefa(função()
        local resultado = acao()  -- Executa a ação
        se callback então
            callback(resultado)  -- Chama o callback com o resultado
        fim
    fim)
fim

-- Usando
tarefa_simulada(
    função()
        filamento.durma(1000)
        retorne "Download concluído!"
    fim,
    função(resultado)
        exiba(resultado)
    fim
)

filamento.inicie_loop()
Esta biblioteca fornece as ferramentas básicas. Para APIs mais avançadas como promises, você pode construir sobre ela!
Com assíncrono, seus programas podem fazer múltiplas coisas ao mesmo tempo!
```