<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Durable Task | The .NET Blog</title><link>https://thedotnetblog.com/pt/tags/durable-task/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>pt</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Sun, 31 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/pt/tags/durable-task/index.xml" rel="self" type="application/rss+xml"/><item><title>Workflows Duráveis no Microsoft Agent Framework: De In-Memory ao Azure Functions</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/maf-durable-workflows-azure-functions-durable-task/</link><pubDate>Sun, 31 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/maf-durable-workflows-azure-functions-durable-task/</guid><description>O modelo de programação de workflows do MAF agora suporta execução durável apoiada pelo Durable Task — veja como construir workflows de agentes compostos que sobrevivem a reinicializações de processos e escalam no Azure Functions.</description><content:encoded>&lt;p&gt;Um dos pontos problemáticos com os primeiros workflows de agentes de IA: eles são frágeis. Um workflow multi-etapas de longa duração vinculado a um único processo significa que reinicialização do processo = estado perdido. Para demos simples está bem. Para cargas de trabalho em produção não está.&lt;/p&gt;
&lt;p&gt;O modelo de programação de workflows do Microsoft Agent Framework agora suporta &lt;strong&gt;execução durável&lt;/strong&gt;, apoiada pelo framework Durable Task, com hospedagem no Azure Functions. Aqui está como o modelo de programação funciona e por que a história de durabilidade importa.&lt;/p&gt;
&lt;h2 id="os-blocos-de-construção-fundamentais"&gt;Os Blocos de Construção Fundamentais&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Executors&lt;/strong&gt; são a unidade fundamental de trabalho. Cada um é tipado — pega uma entrada específica e produz uma saída específica:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.Agents.AI.Workflows&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;internal&lt;/span&gt; &lt;span class="kd"&gt;sealed&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrderLookup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Executor&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;OrderCancelRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;OrderLookup&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;override&lt;/span&gt; &lt;span class="kd"&gt;async&lt;/span&gt; &lt;span class="n"&gt;ValueTask&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;HandleAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;OrderCancelRequest&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IWorkflowContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;CancellationToken&lt;/span&gt; &lt;span class="n"&gt;cancellationToken&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// buscar o pedido, retorná-lo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;OrderId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Workflows&lt;/strong&gt; conectam executors em grafos direcionados usando um builder fluente. O framework cuida da execução, do fluxo de dados entre os passos e da propagação de erros.&lt;/p&gt;
&lt;p&gt;Você pode modelar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cadeias sequenciais (passo A → passo B → passo C)&lt;/li&gt;
&lt;li&gt;Fan-out/fan-in paralelo (executar agentes A, B, C em paralelo, agregar resultados)&lt;/li&gt;
&lt;li&gt;Ramificação condicional&lt;/li&gt;
&lt;li&gt;Aprovações de humano no ciclo (pausar workflow, esperar sinal externo)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="o-runner-in-memory-para-desenvolvimento-local"&gt;O Runner In-Memory para Desenvolvimento Local&lt;/h2&gt;
&lt;p&gt;Começar é rápido:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dotnet&lt;/span&gt; &lt;span class="k"&gt;add&lt;/span&gt; &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;Microsoft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Agents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dotnet&lt;/span&gt; &lt;span class="k"&gt;add&lt;/span&gt; &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;Microsoft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Agents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Workflows&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;O pacote principal inclui um runner leve em processo. Sem dependências externas, sem banco de dados, sem recursos Azure. Funciona muito bem para desenvolvimento local e testes unitários.&lt;/p&gt;
&lt;h2 id="adicionando-durabilidade-com-durable-task"&gt;Adicionando Durabilidade com Durable Task&lt;/h2&gt;
&lt;p&gt;Quando um workflow precisa sobreviver a reinicializações de processo — porque é de longa duração, porque tem passos de humano no ciclo, porque se distribui em muitas chamadas de agentes em paralelo — o runner in-memory não é suficiente.&lt;/p&gt;
&lt;p&gt;A integração Durable Task do MAF armazena o estado do workflow no Azure Storage. Se o processo for reiniciado, o workflow retoma de onde parou. O modelo de programação permanece o mesmo; você apenas troca o runner.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dotnet&lt;/span&gt; &lt;span class="k"&gt;add&lt;/span&gt; &lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;Microsoft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Agents&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Workflows&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DurableTask&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Os mesmos executors, o mesmo grafo de workflow — apoiado por estado durável.&lt;/p&gt;
&lt;h2 id="hospedagem-no-azure-functions"&gt;Hospedagem no Azure Functions&lt;/h2&gt;
&lt;p&gt;A terceira camada é a hospedagem no Azure Functions. Seu workflow se torna um aplicativo Function: acione o workflow via um endpoint HTTP, e o runtime durável cuida do escalonamento, estado e confiabilidade.&lt;/p&gt;
&lt;p&gt;Isso significa que um workflow multi-agente com chamadas paralelas, ramos condicionais e aprovações humanas pode escalar em um ambiente Functions serverless sem gerenciamento de estado personalizado.&lt;/p&gt;
&lt;h2 id="por-que-isso-importa"&gt;Por Que Isso Importa&lt;/h2&gt;
&lt;p&gt;A combinação é significativa para sistemas de IA reais:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chamadas de agentes em paralelo&lt;/strong&gt; — distribuir para múltiplos agentes especializados simultaneamente sem bloqueio, agregar resultados quando todos concluírem&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Processos de longa duração&lt;/strong&gt; — workflows que envolvem aprovação humana ou eventos externos podem pausar e retomar ao longo de horas ou dias&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Escalonamento&lt;/strong&gt; — Azure Functions escala a execução horizontalmente; o framework Durable Task gerencia a coordenação do estado paralelo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se você está construindo workflows MAF além de demos locais simples, este é o caminho para execução de qualidade produção.&lt;/p&gt;
&lt;p&gt;Post original: &lt;a href="https://devblogs.microsoft.com/dotnet/durable-workflows-in-microsoft-agent-framework/"&gt;Durable Workflows in the Microsoft Agent Framework&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>