<?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/id/tags/process-api/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>id</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/id/tags/process-api/index.xml" rel="self" type="application/rss+xml"/><item><title>.NET 11 Akhirnya Memperbaiki API Proses</title><link>https://thedotnetblog.com/id/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/id/news/emiliano-montesdeoca/dotnet-11-process-api-improvements-runandcapturetext/</guid><description>System.Diagnostics.Process mendapatkan pembaruan terbesar dalam beberapa tahun. RunAndCaptureTextAsync, KillOnParentExit, API SafeProcessHandle, dan kontrol penuh atas pengalihan handle standar — tidak ada lagi boilerplate deadlock.</description><content:encoded>&lt;p&gt;Setiap pengembang .NET yang pernah perlu menjalankan proses dan menangkap outputnya telah menulis beberapa variasi dari boilerplate berbahaya yang sama: pembacaan async dari stdout, pembacaan async dari stderr, &lt;code&gt;WaitForExitAsync&lt;/code&gt;, jangan lupa menguras kedua stream atau akan terjadi deadlock. Ini adalah jebakan yang sudah dikenal bertahun-tahun.&lt;/p&gt;
&lt;p&gt;.NET 11 akhirnya memperbaiki ini dengan benar.&lt;/p&gt;
&lt;h2 id="runandcapturetextasync"&gt;RunAndCaptureTextAsync&lt;/h2&gt;
&lt;p&gt;Penambahan utama: satu metode statis yang memulai proses, menangkap stdout dan stderr, dan menunggu keluar tanpa deadlock.&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;Satu panggilan. Tanpa pengosongan stream manual. Tanpa &lt;code&gt;WaitForExit&lt;/code&gt; yang ditempatkan dengan hati-hati. Jika Anda hanya perlu menjalankan sesuatu dan mendapatkan outputnya, inilah API yang Anda inginkan.&lt;/p&gt;
&lt;p&gt;Ada juga &lt;code&gt;Process.RunAsync&lt;/code&gt; untuk kasus di mana Anda ingin menunggu keluar tanpa menangkap output.&lt;/p&gt;
&lt;h2 id="killonparentexit"&gt;KillOnParentExit&lt;/h2&gt;
&lt;p&gt;Masalah umum dengan proses yang dijalankan: jika proses induk crash atau dihentikan, proses anak terus berjalan sebagai yatim piatu. &lt;code&gt;KillOnParentExit&lt;/code&gt; memungkinkan Anda mendeklarasikan saat proses dimulai bahwa proses anak harus dihentikan ketika proses induk keluar.&lt;/p&gt;
&lt;p&gt;Ini adalah fitur yang ada dengan cara khusus platform (job objects di Windows, prctl di Linux) tetapi memerlukan p/invoke atau pustaka pihak ketiga untuk digunakan dari .NET. Sekarang ini adalah properti kelas satu pada &lt;code&gt;ProcessStartInfo&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="api-berbasis-safeprocesshandle"&gt;API Berbasis SafeProcessHandle&lt;/h2&gt;
&lt;p&gt;Permukaan API ringan baru dibangun di sekitar &lt;code&gt;SafeProcessHandle&lt;/code&gt; daripada kelas &lt;code&gt;Process&lt;/code&gt; lengkap. Kelas &lt;code&gt;Process&lt;/code&gt; lengkap membawa banyak status dan sulit untuk dipangkas — jalur &lt;code&gt;SafeProcessHandle&lt;/code&gt; lebih ramah trimmer untuk aplikasi yang perlu meminimalkan ukuran output (WASM, native AOT).&lt;/p&gt;
&lt;h2 id="kontrol-penuh-atas-pewarisan-handle"&gt;Kontrol Penuh atas Pewarisan Handle&lt;/h2&gt;
&lt;p&gt;Pembaruan ini juga menambahkan kontrol granular atas handle mana yang diwarisi proses anak dan bagaimana handle standar dialihkan. Sebelumnya Anda bisa mengalihkan stdin/stdout/stderr tetapi tidak bisa menentukan dengan tepat handle mana yang akan diwarisi di tingkat OS. API baru mengekspos kontrol tersebut.&lt;/p&gt;
&lt;h2 id="mengapa-ini-penting"&gt;Mengapa Ini Penting&lt;/h2&gt;
&lt;p&gt;Kelas &lt;code&gt;Process&lt;/code&gt; digunakan dalam tooling, sistem build, test runner, dan aplikasi apa pun yang memanggil executable lain. Permukaan API lama berasal dari .NET Framework dan mulai menunjukkan usianya. Ini bukan perubahan yang merusak — API lama masih berfungsi — tetapi kode baru harus lebih memilih permukaan baru.&lt;/p&gt;
&lt;p&gt;Untuk aplikasi yang dipangkas atau skenario kompilasi AOT, jalur &lt;code&gt;SafeProcessHandle&lt;/code&gt; sangat disambut. Kelas &lt;code&gt;Process&lt;/code&gt; lama membawa banyak kode yang berat refleksi yang mempersulit pemangkasan.&lt;/p&gt;
&lt;p&gt;Posting asli: &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>