<?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/es/tags/durable-task/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>es</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/es/tags/durable-task/index.xml" rel="self" type="application/rss+xml"/><item><title>Flujos de Trabajo Duraderos en Microsoft Agent Framework: De In-Memory a Azure Functions</title><link>https://thedotnetblog.com/es/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/es/news/emiliano-montesdeoca/maf-durable-workflows-azure-functions-durable-task/</guid><description>El modelo de programación de flujos de trabajo de MAF ahora soporta ejecución duradera respaldada por Durable Task — aquí te mostramos cómo construir flujos de trabajo de agentes componibles que sobreviven a reinicios de procesos y escalan a través de Azure Functions.</description><content:encoded>&lt;p&gt;Uno de los puntos débiles de los primeros flujos de trabajo de agentes de IA: son frágiles. Un flujo de trabajo de múltiples pasos de larga duración vinculado a un único proceso significa que el reinicio del proceso = estado perdido. Para demos simples está bien. Para cargas de trabajo en producción, no.&lt;/p&gt;
&lt;p&gt;El modelo de programación de flujos de trabajo de Microsoft Agent Framework ahora soporta &lt;strong&gt;ejecución duradera&lt;/strong&gt;, respaldada por el framework Durable Task, con hospedaje en Azure Functions. Aquí te explicamos cómo funciona el modelo de programación y por qué importa la historia de durabilidad.&lt;/p&gt;
&lt;h2 id="los-bloques-de-construcción-básicos"&gt;Los Bloques de Construcción Básicos&lt;/h2&gt;
&lt;p&gt;Los &lt;strong&gt;Executors&lt;/strong&gt; son la unidad fundamental de trabajo. Cada uno tiene tipo — toma una entrada específica y produce una salida 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 el pedido, devolverlo&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;Los &lt;strong&gt;Workflows&lt;/strong&gt; conectan ejecutores en grafos dirigidos usando un constructor fluido. El framework gestiona la ejecución, el flujo de datos entre pasos y la propagación de errores.&lt;/p&gt;
&lt;p&gt;Puedes modelar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cadenas secuenciales (paso A → paso B → paso C)&lt;/li&gt;
&lt;li&gt;Fan-out/fan-in paralelo (ejecutar agentes A, B, C en paralelo, agregar resultados)&lt;/li&gt;
&lt;li&gt;Ramificación condicional&lt;/li&gt;
&lt;li&gt;Aprobaciones de humano en el bucle (pausar flujo de trabajo, esperar señal externa)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="el-corredor-in-memory-para-desarrollo-local"&gt;El Corredor In-Memory para Desarrollo Local&lt;/h2&gt;
&lt;p&gt;Empezar es 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;El paquete principal incluye un corredor ligero en proceso. Sin dependencias externas, sin base de datos, sin recursos Azure. Funciona perfectamente para desarrollo local y pruebas unitarias.&lt;/p&gt;
&lt;h2 id="agregar-durabilidad-con-durable-task"&gt;Agregar Durabilidad con Durable Task&lt;/h2&gt;
&lt;p&gt;Cuando un flujo de trabajo necesita sobrevivir a reinicios de proceso — porque es de larga duración, porque tiene pasos de humano en el bucle, porque se dispersa a través de muchas llamadas de agente en paralelo — el corredor in-memory no es suficiente.&lt;/p&gt;
&lt;p&gt;La integración de Durable Task de MAF almacena el estado del flujo de trabajo en Azure Storage. Si el proceso se reinicia, el flujo de trabajo se reanuda desde donde lo dejó. El modelo de programación permanece igual; solo cambias el corredor.&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;Los mismos ejecutores, el mismo grafo de flujo de trabajo — respaldado por estado duradero.&lt;/p&gt;
&lt;h2 id="hospedaje-en-azure-functions"&gt;Hospedaje en Azure Functions&lt;/h2&gt;
&lt;p&gt;La tercera capa es el hospedaje en Azure Functions. Tu flujo de trabajo se convierte en una aplicación Function: activa el flujo de trabajo a través de un endpoint HTTP, y el runtime duradero gestiona el escalado, el estado y la fiabilidad.&lt;/p&gt;
&lt;p&gt;Esto significa que un flujo de trabajo multi-agente con llamadas paralelas, ramas condicionales y aprobaciones humanas puede escalar a través de un entorno de Functions sin servidor sin gestión de estado personalizada.&lt;/p&gt;
&lt;h2 id="por-qué-importa-esto"&gt;Por Qué Importa Esto&lt;/h2&gt;
&lt;p&gt;La combinación es significativa para sistemas de IA reales:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Llamadas de agente en paralelo&lt;/strong&gt; — dispersar a múltiples agentes especializados simultáneamente sin bloquear, agregar resultados cuando todos completen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Procesos de larga duración&lt;/strong&gt; — los flujos de trabajo que implican aprobación humana o eventos externos pueden pausar y reanudar durante horas o días&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Escalado&lt;/strong&gt; — Azure Functions escala la ejecución horizontalmente; el framework Durable Task gestiona la coordinación del estado paralelo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si estás construyendo flujos de trabajo MAF más allá de demos locales simples, este es el camino hacia la ejecución de grado producción.&lt;/p&gt;
&lt;p&gt;Publicación 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>