<?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>.NET 11 | The .NET Blog</title><link>https://thedotnetblog.com/pl/tags/.net-11/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>pl</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/pl/tags/.net-11/index.xml" rel="self" type="application/rss+xml"/><item><title>.NET 11 w końcu naprawia API Procesów</title><link>https://thedotnetblog.com/pl/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/pl/news/emiliano-montesdeoca/dotnet-11-process-api-improvements-runandcapturetext/</guid><description>System.Diagnostics.Process otrzymuje największą aktualizację od lat. RunAndCaptureTextAsync, KillOnParentExit, API SafeProcessHandle i pełna kontrola nad przekierowaniem standardowych uchwytów — koniec z powtarzającym się kodem obsługi deadlocka.</description><content:encoded>&lt;p&gt;Każdy deweloper .NET, który kiedykolwiek musiał uruchomić proces i przechwycić jego wynik, napisał jakąś wariację tego samego niebezpiecznego powtarzającego się kodu: asynchroniczny odczyt z stdout, asynchroniczny odczyt z stderr, &lt;code&gt;WaitForExitAsync&lt;/code&gt;, nie zapomnij opróżnić obu strumieni, albo dostaniesz deadlock. To dobrze znana pułapka, która istnieje od lat.&lt;/p&gt;
&lt;p&gt;.NET 11 w końcu naprawia to porządnie.&lt;/p&gt;
&lt;h2 id="runandcapturetextasync"&gt;RunAndCaptureTextAsync&lt;/h2&gt;
&lt;p&gt;Kluczowe dodanie: jedna statyczna metoda, która uruchamia proces, przechwytuje stdout i stderr, i czeka na zakończenie bez deadlocka.&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;Jedno wywołanie. Bez ręcznego opróżniania strumieni. Bez ostrożnie umieszczonego &lt;code&gt;WaitForExit&lt;/code&gt;. Jeśli po prostu chcesz uruchomić coś i uzyskać wynik, to jest właśnie to API, którego szukasz.&lt;/p&gt;
&lt;p&gt;Jest też &lt;code&gt;Process.RunAsync&lt;/code&gt; dla przypadku, gdy chcesz czekać na zakończenie bez przechwytywania danych wyjściowych.&lt;/p&gt;
&lt;h2 id="killonparentexit"&gt;KillOnParentExit&lt;/h2&gt;
&lt;p&gt;Częsty problem z uruchamianymi procesami: jeśli proces nadrzędny ulega awarii lub zostaje zabity, procesy potomne nadal działają jako sieroty. &lt;code&gt;KillOnParentExit&lt;/code&gt; pozwala zadeklarować przy uruchamianiu procesu, że proces potomny powinien zostać zakończony, gdy zakończy się proces nadrzędny.&lt;/p&gt;
&lt;p&gt;Ta funkcja istniała w specyficznych dla platformy formach (obiekty zadań w Windows, prctl w Linux), ale wymagała p/invoke lub bibliotek zewnętrznych do użycia z .NET. Teraz jest właściwością pierwszej klasy w &lt;code&gt;ProcessStartInfo&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="api-oparte-na-safeprocesshandle"&gt;API oparte na SafeProcessHandle&lt;/h2&gt;
&lt;p&gt;Nowa lekka powierzchnia API jest zbudowana wokół &lt;code&gt;SafeProcessHandle&lt;/code&gt;, a nie pełnej klasy &lt;code&gt;Process&lt;/code&gt;. Pełna klasa &lt;code&gt;Process&lt;/code&gt; niesie ze sobą dużo stanu i trudno ją przycinać — ścieżka &lt;code&gt;SafeProcessHandle&lt;/code&gt; jest bardziej przyjazna dla trimmera w aplikacjach, które muszą minimalizować rozmiar wyjścia (WASM, natywne AOT).&lt;/p&gt;
&lt;h2 id="pełna-kontrola-nad-dziedziczeniem-uchwytów"&gt;Pełna Kontrola nad Dziedziczeniem Uchwytów&lt;/h2&gt;
&lt;p&gt;Aktualizacja dodaje również szczegółową kontrolę nad tym, które uchwyty dziedziczy proces potomny i jak są przekierowywane standardowe uchwyty. Wcześniej można było przekierowywać stdin/stdout/stderr, ale nie można było określić dokładnie, które uchwyty dziedziczyć na poziomie systemu operacyjnego. Nowe API udostępniają tę kontrolę.&lt;/p&gt;
&lt;h2 id="dlaczego-to-jest-ważne"&gt;Dlaczego To Jest Ważne&lt;/h2&gt;
&lt;p&gt;Klasa &lt;code&gt;Process&lt;/code&gt; jest używana w toolingu, systemach budowania, uruchomieniach testów i każdej aplikacji, która wywołuje inne pliki wykonywalne. Stara powierzchnia API pochodzi z epoki .NET Framework i pokazywała swój wiek. Nie jest to zmiana łamiąca kompatybilność — stare API nadal działają — ale nowy kod powinien preferować nową powierzchnię.&lt;/p&gt;
&lt;p&gt;W przypadku przycinanych aplikacji lub scenariuszy kompilacji AOT, ścieżka &lt;code&gt;SafeProcessHandle&lt;/code&gt; jest szczególnie mile widziana. Stara klasa &lt;code&gt;Process&lt;/code&gt; przynosiła dużo kodu z ciężkimi odwołaniami refleksji, który komplikował przycinanie.&lt;/p&gt;
&lt;p&gt;Oryginalny post: &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><item><title>.NET 11 Preview 4: Szablon Serwera MCP, Biblioteki Runtime-Async, API Procesów</title><link>https://thedotnetblog.com/pl/news/emiliano-montesdeoca/dotnet-11-preview-4-mcp-template-runtime-async-process-api/</link><pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pl/news/emiliano-montesdeoca/dotnet-11-preview-4-mcp-template-runtime-async-process-api/</guid><description>.NET 11 Preview 4 jest dostępny. Najważniejsze: szablon serwera MCP w SDK, biblioteki runtime skompilowane z runtime-async, dotnet watch dla urządzeń mobilnych i duże rozszerzenie API Procesów.</description><content:encoded>&lt;p&gt;.NET 11 Preview 4 jest dostępny. Każde wydanie głównej wersji zapoznawczej .NET dodaje długą listę elementów obejmujących runtime, SDK, biblioteki, ASP.NET Core, MAUI, C# i Entity Framework. Zamiast powtarzać pełną listę, oto rzeczy, które przykuły moją uwagę.&lt;/p&gt;
&lt;h2 id="szablon-serwera-mcp-w-sdk-net"&gt;Szablon Serwera MCP w SDK .NET&lt;/h2&gt;
&lt;p&gt;Najciekawszy element: szablon projektu serwera MCP jest teraz zawarty w SDK. Oznacza to, że &lt;code&gt;dotnet new mcp-server&lt;/code&gt; (lub jak ostatecznie będzie nazywać się polecenie) działa od razu. Dla każdego, kto buduje narzędzia MCP w .NET, znacznie redukuje to początkowe trudności. Integracja MCP w łańcuchu narzędzi platformy wskazuje kierunek, w którym zmierza ekosystem.&lt;/p&gt;
&lt;h2 id="biblioteki-runtime-skompilowane-z-runtime-async"&gt;Biblioteki Runtime Skompilowane z Runtime-Async&lt;/h2&gt;
&lt;p&gt;Sam runtime teraz kompiluje swoje biblioteki standardowe przy użyciu funkcji runtime-async. To wewnętrzna zmiana wpływająca na wydajność — maszyny stanów async w runtime stają się bardziej wydajne. Znaczenie tutaj nie leży w widocznych zmianach API; chodzi o to, że runtime-async jest wystarczająco dojrzały, żeby być używanym w samej BCL, co jest ważnym sygnałem dotyczącym gotowości tej funkcji.&lt;/p&gt;
&lt;h2 id="optymalizacje-jit-i-wewnętrzne-funkcje-sprzętowe"&gt;Optymalizacje JIT i Wewnętrzne Funkcje Sprzętowe&lt;/h2&gt;
&lt;p&gt;Preview 4 kontynuuje prace nad JIT. Ulepszenia wewnętrznych funkcji sprzętowych i generowania kodu trafiają tutaj — szczegóły można znaleźć w informacjach o wydaniu runtime. Tego rodzaju zmiany zazwyczaj poprawiają przepustowość w intensywnych pętlach obliczeniowych bez żadnych zmian w kodzie z twojej strony.&lt;/p&gt;
&lt;h2 id="rozszerzenie-api-procesów"&gt;Rozszerzenie API Procesów&lt;/h2&gt;
&lt;p&gt;Duże aktualizacje &lt;code&gt;System.Diagnostics.Process&lt;/code&gt; pojawiają się w Preview 4:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Process.RunAndCaptureTextAsync&lt;/code&gt; — uruchom proces, przechwytuj stdout/stderr, poczekaj na zakończenie, wszystko w jednym wywołaniu bez ryzyka deadlocka&lt;/li&gt;
&lt;li&gt;&lt;code&gt;KillOnParentExit&lt;/code&gt; — lekkie powiązanie cyklu życia między procesem nadrzędnym a podrzędnym&lt;/li&gt;
&lt;li&gt;API oparte na &lt;code&gt;SafeProcessHandle&lt;/code&gt;, bardziej przyjazne dla trimmera&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jeśli kiedykolwiek pisałeś powtarzający się kod do przechwytywania danych wyjściowych procesu bez powodowania deadlocków (asynchroniczne odczytywanie zarówno z stdout &lt;em&gt;jak i&lt;/em&gt; stderr jednocześnie), &lt;code&gt;RunAndCaptureTextAsync&lt;/code&gt; jest właśnie tym API, którego brakowało.&lt;/p&gt;
&lt;h2 id="dotnet-watch-dla-android-i-ios"&gt;dotnet watch dla Android i iOS&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;dotnet watch&lt;/code&gt; teraz obsługuje wybór urządzenia dla projektów .NET MAUI Android i iOS. Szybsza iteracja na urządzeniach mobilnych bez ręcznego zarządzania połączeniami urządzeń w pętli kompilacji.&lt;/p&gt;
&lt;h2 id="oparte-na-span-api-kompresji"&gt;Oparte na Span API Kompresji&lt;/h2&gt;
&lt;p&gt;Nowe API kodera/dekodera Deflate, ZLib i GZip oparte na span trafiają do bibliotek. Mniej alokacji przy pracy ze skompresowanymi danymi — istotne w przypadku przetwarzania danych o wysokiej przepustowości.&lt;/p&gt;
&lt;h2 id="wypróbuj"&gt;Wypróbuj&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://dotnet.microsoft.com/download/dotnet/11.0"&gt;Pobierz .NET 11 Preview 4&lt;/a&gt; — to wersja zapoznawcza, niegotowa na produkcję, ale warto uruchomić ją na swoich projektach, żeby wykryć problemy wcześnie przed cyklem RC.&lt;/p&gt;
&lt;p&gt;Oryginalny post: &lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-11-preview-4/"&gt;.NET 11 Preview 4 is now available!&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>