> ## Content Index
> Fetch the complete content index at: https://www.azurebrasil.cloud/llms.txt
> Use this file to discover other available public pages before exploring further.

# Seus agentes ainda trabalham em fila? Conheça o BackgroundAgentsProvider do MAF
- URL: https://www.azurebrasil.cloud/blog/seus-agentes-ainda-trabalham-em-fila-conheca-o-backgroundagentsprovider-do-maf/
- Published: 2026-06-18T18:03:46.000Z
- Updated: 2026-06-18T18:06:42.000Z
- Description: Seus agentes de IA ainda executam tarefas uma por vez? Neste episódio do MAF na prática, mostro como o BackgroundAgentsProvider permite que um agente pai dispare múltiplas subtarefas em paralelo em C# — cobrindo a arquitetura, a configuração do Harness Agent filho e a agregação final dos resultados.
- Author: Carlos Machel

Se você já construiu um agente que precisa pesquisar múltiplas fontes e ficou olhando para chamadas sequenciais se empilhando, esse episódio foi feito pra você.

No **MAF na prática #23**, mostro como o `BackgroundAgentsProvider` transforma a orquestração em C#: um agente pai que delega tarefas para agentes filhos rodando em background, coleta os resultados conforme chegam e entrega uma tabela consolidada — sem bloquear, sem polling manual.

## O problema que esse recurso resolve

Pesquisar o preço de fechamento de 5 ações sequencialmente significa esperar a soma de todas as buscas. Disparar todas ao mesmo tempo significa esperar apenas a mais lenta.

A diferença parece simples, mas exige um mecanismo que o agente pai consiga iniciar tarefas sem bloquear e coletar os resultados depois. É exatamente o que o `BackgroundAgentsProvider` entrega.

## Como o BackgroundAgentsProvider funciona de verdade

Ele herda de `AIContextProvider`. Antes de cada chamada ao LLM, o framework invoca o método `ProvideAIContextAsync`, que devolve um `AIContext` com instruções adicionais no system prompt e um array de `AITool` injetado no `ChatOptions`. Do ponto de vista do modelo, essas tools são function calls normais — sem nenhuma mágica escondida.

As cinco tools que ele injeta são:

- `BackgroundAgents_StartTask` — dispara o agente filho e retorna um ID imediatamente
- `BackgroundAgents_WaitForFirstCompletion` — espera o primeiro task da lista completar
- `BackgroundAgents_GetTaskResults` — busca o resultado de um task completo
- `BackgroundAgents_GetAllTasks` — lista todos os tasks com status atual
- `BackgroundAgents_ClearCompletedTask` — libera a sessão do task da memória

O pai nunca acessa a web diretamente — ele só usa essas tools para delegar.

## O que você vai ver no vídeo

**A arquitetura pai-filho configurada com `.AsHarnessAgent()`.** O `WebSearchAgent` é criado com flags explícitas desligando tudo que ele não precisa: memória, acesso a arquivos, todo provider que não seja executar a tarefa delegada. Clean Agent Design sem firula.

**Como o `BackgroundAgents` property conecta tudo.** Basta preencher `BackgroundAgents = [webSearchAgent]` no agente pai para o framework instanciar e registrar o `BackgroundAgentsProvider` automaticamente. O pai também recebe `DisableWebSearch = true` — ele não acessa a web; quem acessa é o filho.

**O loop de coleta que define o paralelismo.** A chave está nas instructions: disparar `StartTask` para todos os tickers *antes* de chamar qualquer `WaitForFirstCompletion`. Cada `StartTask` retorna imediatamente com um ID — o filho já está rodando. O loop de `WaitForFirstCompletion` vai coletando os resultados conforme chegam, não na ordem que foram disparados.

**A demo ao vivo com 5 tickers.** Você vê as 5 chamadas a `StartTask` saindo em sequência rápida e o pai começando a coletar enquanto todos os filhos ainda estão trabalhando. É a diferença de tempo total que torna o padrão convincente.

## Por que o padrão importa além do exemplo

O cenário das ações é simples por design. Mas o mesmo mecanismo se aplica a qualquer fan-out: separar análise de front-end, back-end e testes entre agentes especializados, processar múltiplos documentos em paralelo, pesquisar fontes independentes simultaneamente. O `BackgroundAgentsProvider` é a peça que faltava quando o modelo precisa ser o próprio orquestrador das subtarefas.

▶️ **Assista agora:** 

Código completo em [https://github.com/carlosmachel/maf-video-23](https://github.com/carlosmachel/maf-video-23?ref=azurebrasil.cloud). Dúvida sobre algum trecho, deixa nos comentários.