Futures e Tasks

Definição

Futures e Tasks são abstrações que representam valores ou resultados que estarão disponíveis no futuro, geralmente como resultado de uma operação assíncrona.

  • Um Future é um placeholder para um valor futuro, que ainda não foi calculado.
  • Uma Task é a unidade de execução assíncrona, que realiza um trabalho e atualiza o Future com o resultado.

Em muitas linguagens, as Tasks são consideradas um tipo especial de Future, pois representam uma computação em andamento que pode ser aguardada (await, .get(), etc.).

Objetivos de Futures e Tasks

  • Representar operações em progresso de forma rastreável.
  • Permitir aguardar resultados assíncronos com controle explícito.
  • Gerenciar execuções paralelas, com cancelamento, timeout ou coleta de resultados.
  • Unificar o tratamento de operações assíncronas em APIs consistentes.

Exemplo prático (Python)

import asyncio

async def tarefa_lenta():
    await asyncio.sleep(1)
    return "resultado"

async def main():
    # cria uma Task a partir de uma coroutine
    task = asyncio.create_task(tarefa_lenta())

    print("Tarefa iniciada, aguardando resultado...")
    resultado = await task
    print("Resultado:", resultado)

asyncio.run(main())

Saída esperada

Tarefa iniciada, aguardando resultado...
Resultado: resultado
  • A função tarefa_lenta retorna um Future.

  • O método create_task() transforma a coroutine em uma Task agendada no event loop.

  • Usamos await para aguardar o término da Task.

Estados de uma Future/Task

[Pending] → [Running] → [Done]
                      ↘︎ [Cancelled] ou [Exception]

Pending: a tarefa foi criada mas ainda não começou.

Running: está em execução.

Done: foi concluída com sucesso.

Pode também ser cancelada ou terminar com erro.

Comparativo entre linguagens

Linguagem Future/Task Espera com
Python asyncio.Future, asyncio.Task await
Java Future<T>, CompletableFuture<T> .get(), .thenApply()
C# Task, Task<T> await
Rust Future trait .await
JavaScript Promise .then(), await

Diferença entre Future e Task

Conceito Future Task
Representa Resultado futuro (valor pendente) Execução de uma coroutine ou função
Estado Pode ser preenchido externamente Controlado pelo runtime
Exemplo (Python) future = loop.create_future() task = asyncio.create_task(coro())

ℹ️ Em Python, uma Task envolve agendamento real no event loop, enquanto um Future pode ser controlado manualmente (ex: para testes ou integração com outras APIs).

Relacionados

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com