<?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>Process API | The .NET Blog</title><link>https://thedotnetblog.com/ca/tags/process-api/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>ca</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Tue, 26 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/ca/tags/process-api/index.xml" rel="self" type="application/rss+xml"/><item><title>.NET 11 finalment arregla l'API de Processos</title><link>https://thedotnetblog.com/ca/news/emiliano-montesdeoca/dotnet-11-process-api-improvements-runandcapturetext/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/news/emiliano-montesdeoca/dotnet-11-process-api-improvements-runandcapturetext/</guid><description>System.Diagnostics.Process rep la seva actualització més gran en anys. RunAndCaptureTextAsync, KillOnParentExit, APIs SafeProcessHandle i control total sobre la redirecció dels identificadors estàndard — sense més codi repetitiu per als bloqueigs morts.</description><content:encoded>&lt;p&gt;Tot desenvolupador .NET que alguna vegada ha hagut de llançar un procés i capturar la seva sortida ha escrit alguna variació del mateix codi repetitiu perillós: lectura async de stdout, lectura async de stderr, &lt;code&gt;WaitForExitAsync&lt;/code&gt;, sense oblidar buidar tots dos streams o causaràs un bloqueig mort. És una trampa ben coneguda que existeix des de fa anys.&lt;/p&gt;
&lt;p&gt;.NET 11 finalment ho arregla correctament.&lt;/p&gt;
&lt;h2 id="runandcapturetextasync"&gt;RunAndCaptureTextAsync&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;addició principal: un únic mètode estàtic que inicia un procés, captura stdout i stderr, i espera la sortida sense bloqueig mort.&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAndCaptureTextAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dotnet&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;--version&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="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StandardOutput&lt;/span&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;Una sola crida. Sense buidatge manual de streams. Sense un &lt;code&gt;WaitForExit&lt;/code&gt; col·locat acuradament. Si simplement necessiteu executar alguna cosa i obtenir la seva sortida, aquesta és l&amp;rsquo;API que voleu.&lt;/p&gt;
&lt;p&gt;Hi ha també &lt;code&gt;Process.RunAsync&lt;/code&gt; per al cas en què voleu esperar la sortida sense capturar el resultat.&lt;/p&gt;
&lt;h2 id="killonparentexit"&gt;KillOnParentExit&lt;/h2&gt;
&lt;p&gt;Un problema comú amb els processos llançats: si el pare falla o és acabat, els processos fill continuen executant-se com a orfes. &lt;code&gt;KillOnParentExit&lt;/code&gt; us permet declarar en el moment d&amp;rsquo;iniciar el procés que el procés fill ha d&amp;rsquo;acabar quan el procés pare surti.&lt;/p&gt;
&lt;p&gt;Aquesta és una funcionalitat que existia de maneres específiques per plataforma (job objects a Windows, prctl a Linux) però requeria p/invoke o biblioteques de tercers per ser usada des de .NET. Ara és una propietat de primera classe a &lt;code&gt;ProcessStartInfo&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="apis-basades-en-safeprocesshandle"&gt;APIs Basades en SafeProcessHandle&lt;/h2&gt;
&lt;p&gt;La nova superfície d&amp;rsquo;API lleugera es construeix al voltant de &lt;code&gt;SafeProcessHandle&lt;/code&gt; en lloc de la classe &lt;code&gt;Process&lt;/code&gt; completa. La classe &lt;code&gt;Process&lt;/code&gt; completa porta molt d&amp;rsquo;estat i és difícil de retallar — el camí &lt;code&gt;SafeProcessHandle&lt;/code&gt; és més amigable amb el trimmer per a aplicacions que necessiten minimitzar la mida de sortida (WASM, AOT natiu).&lt;/p&gt;
&lt;h2 id="control-total-sobre-lherència-didentificadors"&gt;Control Total Sobre l&amp;rsquo;Herència d&amp;rsquo;Identificadors&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;actualització també afegeix control detallat sobre quins identificadors hereda un procés fill i com es redireccionen els identificadors estàndard. Anteriorment podíeu redirigir stdin/stdout/stderr però no podíeu especificar exactament quins identificadors heretar a nivell de SO. Les noves APIs exposen aquest control.&lt;/p&gt;
&lt;h2 id="per-què-és-important"&gt;Per Què És Important&lt;/h2&gt;
&lt;p&gt;La classe &lt;code&gt;Process&lt;/code&gt; s&amp;rsquo;usa en eines, sistemes de compilació, executors de proves i qualsevol aplicació que invoca altres executables. L&amp;rsquo;antiga superfície d&amp;rsquo;API datava de .NET Framework i estava mostrant la seva edat. No és un canvi que trenca la compatibilitat — les APIs antigues segueixen funcionant — però el nou codi hauria de preferir la nova superfície.&lt;/p&gt;
&lt;p&gt;Per a aplicacions retallades o escenaris de compilació AOT, el camí &lt;code&gt;SafeProcessHandle&lt;/code&gt; és especialment benvingut. L&amp;rsquo;antiga classe &lt;code&gt;Process&lt;/code&gt; portava molt codi pesat en reflexió que complicava el retallat.&lt;/p&gt;
&lt;p&gt;Publicació original: &lt;a href="https://devblogs.microsoft.com/dotnet/process-api-improvements-in-dotnet-11/"&gt;Process API Improvements in .NET 11&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>