<?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/fr/tags/durable-task/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>fr</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/fr/tags/durable-task/index.xml" rel="self" type="application/rss+xml"/><item><title>Workflows Durables dans Microsoft Agent Framework : De In-Memory à Azure Functions</title><link>https://thedotnetblog.com/fr/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/fr/news/emiliano-montesdeoca/maf-durable-workflows-azure-functions-durable-task/</guid><description>Le modèle de programmation de workflows de MAF prend désormais en charge l'exécution durable basée sur Durable Task — voici comment créer des workflows d'agents composables qui survivent aux redémarrages de processus et s'adaptent à Azure Functions.</description><content:encoded>&lt;p&gt;L&amp;rsquo;un des points douloureux avec les premiers workflows d&amp;rsquo;agents IA : ils sont fragiles. Un workflow multi-étapes de longue durée lié à un seul processus signifie que le redémarrage du processus = état perdu. Pour des démos simples, c&amp;rsquo;est acceptable. Pour des charges de travail en production, ce ne l&amp;rsquo;est pas.&lt;/p&gt;
&lt;p&gt;Le modèle de programmation de workflows de Microsoft Agent Framework prend désormais en charge l&amp;rsquo;&lt;strong&gt;exécution durable&lt;/strong&gt;, basée sur le framework Durable Task, avec hébergement Azure Functions. Voici comment fonctionne le modèle de programmation et pourquoi l&amp;rsquo;histoire de la durabilité compte.&lt;/p&gt;
&lt;h2 id="les-blocs-de-construction-fondamentaux"&gt;Les Blocs de Construction Fondamentaux&lt;/h2&gt;
&lt;p&gt;Les &lt;strong&gt;Executors&lt;/strong&gt; sont l&amp;rsquo;unité fondamentale de travail. Chacun est typé — il prend une entrée spécifique et produit une sortie spécifique :&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;// rechercher la commande, la retourner&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;Les &lt;strong&gt;Workflows&lt;/strong&gt; relient les executors en graphes dirigés en utilisant un constructeur fluide. Le framework gère l&amp;rsquo;exécution, le flux de données entre les étapes et la propagation des erreurs.&lt;/p&gt;
&lt;p&gt;Vous pouvez modéliser :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Des chaînes séquentielles (étape A → étape B → étape C)&lt;/li&gt;
&lt;li&gt;Fan-out/fan-in parallèle (exécuter les agents A, B, C en parallèle, agréger les résultats)&lt;/li&gt;
&lt;li&gt;Branchement conditionnel&lt;/li&gt;
&lt;li&gt;Approbations humain-dans-la-boucle (suspendre le workflow, attendre un signal externe)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="le-runner-in-memory-pour-le-développement-local"&gt;Le Runner In-Memory pour le Développement Local&lt;/h2&gt;
&lt;p&gt;Démarrer est rapide :&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;Le package principal inclut un runner léger en cours de processus. Pas de dépendances externes, pas de base de données, pas de ressources Azure. Fonctionne très bien pour le développement local et les tests unitaires.&lt;/p&gt;
&lt;h2 id="ajouter-la-durabilité-avec-durable-task"&gt;Ajouter la Durabilité avec Durable Task&lt;/h2&gt;
&lt;p&gt;Quand un workflow doit survivre aux redémarrages de processus — parce qu&amp;rsquo;il est de longue durée, parce qu&amp;rsquo;il a des étapes humain-dans-la-boucle, parce qu&amp;rsquo;il se distribue sur de nombreux appels d&amp;rsquo;agents en parallèle — le runner in-memory n&amp;rsquo;est pas suffisant.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;intégration Durable Task de MAF stocke l&amp;rsquo;état du workflow dans Azure Storage. Si le processus redémarre, le workflow reprend là où il s&amp;rsquo;était arrêté. Le modèle de programmation reste le même ; vous remplacez simplement le 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;Les mêmes executors, le même graphe de workflow — basé sur un état durable.&lt;/p&gt;
&lt;h2 id="hébergement-azure-functions"&gt;Hébergement Azure Functions&lt;/h2&gt;
&lt;p&gt;La troisième couche est l&amp;rsquo;hébergement Azure Functions. Votre workflow devient une application Function : déclenchez le workflow via un endpoint HTTP, et le runtime durable gère la mise à l&amp;rsquo;échelle, l&amp;rsquo;état et la fiabilité.&lt;/p&gt;
&lt;p&gt;Cela signifie qu&amp;rsquo;un workflow multi-agents avec des appels parallèles, des branches conditionnelles et des approbations humaines peut s&amp;rsquo;adapter à un environnement Functions serverless sans gestion d&amp;rsquo;état personnalisée.&lt;/p&gt;
&lt;h2 id="pourquoi-cest-important"&gt;Pourquoi C&amp;rsquo;est Important&lt;/h2&gt;
&lt;p&gt;La combinaison est significative pour les vrais systèmes IA :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Appels d&amp;rsquo;agents en parallèle&lt;/strong&gt; — distribuer vers plusieurs agents spécialisés simultanément sans blocage, agréger les résultats quand tous terminent&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Processus de longue durée&lt;/strong&gt; — les workflows qui impliquent une approbation humaine ou des événements externes peuvent se suspendre et reprendre sur des heures ou des jours&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mise à l&amp;rsquo;échelle&lt;/strong&gt; — Azure Functions fait évoluer l&amp;rsquo;exécution horizontalement ; le framework Durable Task gère la coordination de l&amp;rsquo;état parallèle&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si vous construisez des workflows MAF au-delà de simples démos locaux, c&amp;rsquo;est le chemin vers l&amp;rsquo;exécution de qualité production.&lt;/p&gt;
&lt;p&gt;Publication originale : &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>