Filas de Tarefas em TypeScript: Guia Completo para Iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução às Filas de Tarefas em TypeScript

\n\n

Uma fila de tarefas (task queue) é uma das estruturas de dados fundamentais na programação, que opera pelo princípio "primeiro a entrar, primeiro a sair" (FIFO). Em TypeScript, as filas de tarefas são amplamente utilizadas para gerenciar operações assíncronas, processar requisições, organizar processos em segundo plano e muitos outros cenários.

\n\n

Neste artigo, vamos explorar como criar e usar filas de tarefas em TypeScript do zero. Você aprenderá a implementar uma fila básica, adicionar prioridades e tratar erros. O material é voltado para desenvolvedores iniciantes familiarizados com os fundamentos do TypeScript.

\n\n

O que é uma fila de tarefas e por que ela é necessária?

\n\n

Uma fila é uma lista ordenada de elementos, onde novos elementos são adicionados ao final e a remoção ocorre do início. Imagine uma fila em uma loja: o primeiro cliente é atendido primeiro, e os novos entram no final.

\n\n

Na programação, as filas de tarefas são usadas para:

\n\n
    \n
  • Processamento assíncrono — executar tarefas em segundo plano sem bloquear o fluxo principal
  • \n
  • Gerenciamento de carga — limitar o número de operações executadas simultaneamente
  • \n
  • Processamento de eventos — processar requisições recebidas sequencialmente
  • \n
  • Agendamento de tarefas — executar tarefas com atraso ou em horários programados
  • \n
\n\n

Implementação de uma fila de tarefas básica em TypeScript

\n\n

Criando a classe da fila

\n\n

Vamos começar com uma implementação simples de fila em TypeScript. Criaremos a classe TaskQueue, que suporta operações básicas:

\n\n
// task-queue.ts\ntype Task<T> = () => Promise<T>;\n\nclass TaskQueue<T> {\n    private queue: Task<T>[] = [];\n    private isProcessing = false;\n\n    // Adicionar tarefa à fila\n    enqueue(task: Task<T>): void {\n        this.queue.push(task);\n        if (!this.isProcessing) {\n            this.processQueue();\n        }\n    }\n\n    // Processar a fila\n    private async processQueue(): Promise<void> {\n        this.isProcessing = true;\n\n        while (this.queue.length > 0) {\n            const task = this.queue.shift()!;\n            try {\n                const result = await task();\n                console.log('Tarefa concluída:', result);\n            } catch (error) {\n                console.error('Erro ao executar a tarefa:', error);\n            }\n        }\n\n        this.isProcessing = false;\n    }\n\n    // Verificar se a fila está vazia\n    isEmpty(): boolean {\n        return this.queue.length === 0;\n    }\n\n    // Obter o tamanho da fila\n    size(): number {\n        return this.queue.length;\n    }\n}
\n\n

Usando a fila

\n\n

Agora vamos ver como usar nossa classe na prática:

\n\n
// example.ts\nconst taskQueue = new TaskQueue<string>();\n\n// Criar várias tarefas assíncronas\nconst task1 = async () => {\n    await delay(1000);\n    return 'Primeira tarefa concluída';\n};\n\nconst task2 = async () => {\n    await delay(500);\n    return 'Segunda tarefa concluída';\n};\n\nconst task3 = async () => {\n    await delay(200);\n    return 'Terceira tarefa concluída';\n};\n\n// Adicionar tarefas à fila\ntaskQueue.enqueue(task1);\ntaskQueue.enqueue(task2);\ntaskQueue.enqueue(task3);\n\n// Função auxiliar\nfunction delay(ms: number): Promise<void> {\n    return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n// Resultado:\n// Tarefa concluída: Primeira tarefa concluída (após 1s)\n// Tarefa concluída: Segunda tarefa concluída (após 1.5s)\n// Tarefa concluída: Terceira tarefa concluída (após 1.7s)
\n\n

Fila avançada com prioridades

\n\n

Em projetos reais, muitas vezes é necessário processar tarefas com diferentes prioridades. Vamos expandir nossa fila adicionando suporte a prioridades:

\n\n
// priorit                

Blogs

Book Recommendations