Connect with us

Entwicklung & Code

Neu in .NET 10.0 [26]: LINQ-Operationen auf IAsyncEnumerable


IAsyncEnumerable ist die in .NET Core 3.0 eingeführte asynchrone Variante von IEnumerable. Sie ermöglicht asynchrone Streams: das schrittweise, nicht-blockierende Iterieren über Daten, die asynchron bereitgestellt werden.

Weiterlesen nach der Anzeige


Der Dotnet-Doktor – Holger Schwichtenberg

Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

LINQ-Operationen auf IAsyncEnumerable erforderten bisher das NuGet-Paket System.Linq.Async. Nun ist diese Funktionalität im Kern von .NET verfügbar.


betterCode() .NET 11.0

betterCode() .NET 11.0

(Bild: King / stock.adobe.com)

Das ist neu in .NET 11.0: Dr. Holger Schwichtenberg und weitere Experten präsentieren am 17. November 2026 auf der Online-Konferenz betterCode() .NET 11.0 die Änderungen für Entwicklerinnen und Entwickler in .NET SDK, C# 15.0 und mehr. Bis zur Veröffentlichung des Programms sind vergünstigte Blind-Bird-Tickets verfügbar.

Folgender Code nutzt Where() und OrderBy() mit IAsyncEnumerable:


namespace NET10_Console.FCL;

using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;

public readonly record struct Kabinettsmitglied(string Name, string Amt);

/// 
/// LINQ auf IAsyncEnumerable erforderte bisher NuGet-Paket System.Linq.Async
/// 
public class FCL10_LINQAsyncEnumerable
{
 public async Task Run()
 {
  CUI.Demo(nameof(FCL10_LINQAsyncEnumerable));

  // Hole Personen im Bundeskabinett
  var datenquelle = new Bundeskabinett().GetAll();

  // Asynchrone Iteration mit LINQ (Filtern und optional Sortieren)
  // Achtung: .OrderBy(x=>x.Name) führt dazu, dass foreach auf das letzte Element warten muss --> Vorteil von async entfällt :-(
  await foreach (var person in datenquelle.Where(x => x.Amt.Contains("ministerin")))
  {
   Console.WriteLine(DateTime.Now.ToLongTimeString() + ": " + person);
  }
 }

 public class Bundeskabinett
 {
  /// 
  /// Liefert alle Mitglieder des Bundeskabinetts (Stand: 21.09.2025) als Async-Stream.
  /// Quelle: Bundesregierung.de (siehe Code-Kommentar).
  /// 
  public async IAsyncEnumerable GetAll(
      [EnumeratorCancellation] CancellationToken cancellationToken = default)
  {
   // Quelle: 
   var daten = new List
        {
            new("Friedrich Merz", "Bundeskanzler"),
            new("Lars Klingbeil", "Bundesminister der Finanzen"),
            new("Alexander Dobrindt", "Bundesminister des Innern"),
            new("Dr. Johann Wadephul", "Bundesminister des Auswärtigen"),
            new("Boris Pistorius", "Bundesminister der Verteidigung"),
            new("Katherina Reiche", "Bundesministerin für Wirtschaft und Energie"),
            new("Dorothee Bär", "Bundesministerin für Forschung, Technologie und Raumfahrt"),
            new("Dr. Stefanie Hubig", "Bundesministerin der Justiz und für Verbraucherschutz"),
            new("Karin Prien", "Bundesministerin für Bildung, Familie, Senioren, Frauen und Jugend"),
            new("Bärbel Bas", "Bundesministerin für Arbeit und Soziales"),
            new("Dr. Karsten Wildberger", "Bundesminister für Digitales und Staatsmodernisierung"),
            new("Patrick Schnieder", "Bundesminister für Verkehr"),
            new("Carsten Schneider", "Bundesminister für Umwelt, Klimaschutz, Naturschutz und nukleare Sicherheit"),
            new("Nina Warken", "Bundesministerin für Gesundheit"),
            new("Alois Rainer", "Bundesminister für Landwirtschaft, Ernährung und Heimat"),
            new("Reem Alabali Radovan", "Bundesministerin für wirtschaftliche Zusammenarbeit und Entwicklung"),
            new("Verena Hubertz", "Bundesministerin für Wohnen, Stadtentwicklung und Bauwesen"),
            new("Thorsten Frei", "Bundesminister für besondere Aufgaben / Chef des Bundeskanzleramtes"),
        };

   foreach (var m in daten)
   {
    cancellationToken.ThrowIfCancellationRequested();
    yield return m;
    await Task.Delay(200); // Simuliere etwas Wartezeit
    await Task.Yield(); // sorgt für echte Asynchronität beim Streamen
   }
  }
 }
}



Screenshot

Screenshot

Der Screenshot zeigt die Ausgabe ohne Sortierung zu verschiedenen Zeitpunkten – direkt nach dem Eintreffen der Daten (Abb. 1).


Screenshot

Screenshot

Der Screenshot zeigt die Ausgabe mit Sortierung zu verschiedenen Zeitpunkten – es gab eine Wartezeit vor der ersten Ausgabe (Abb. 2).

Ein Praxisbeispiel dazu: Folgender Code zeigt die Ausführung einer Reihe von HTTP-Aufrufen mit asynchroner Ausgabe der Ergebnisse via Task.WhenEach(). Hier ist nun ein Filtern mit Where() oder eine Sortierung mit OrderBy() möglich. Diese blockiert jedoch – wie üblich – die Weiterverarbeitung, bis das letzte Ergebnis vorliegt, und beeinträchtigt damit den Vorteil der asynchronen Ausführung.

Weiterlesen nach der Anzeige


public async Task Run()
{
 CUI.Demo(nameof(FCL10_LINQAsyncEnumerable));
 Console.WriteLine($"{DateTime.Now.ToLongTimeString()}: Starte Websiteabfragen...");
 using HttpClient http = new();
 Task t1 = http.GetAsync("
 Task t2 = http.GetAsync("
 Task t3 = http.GetAsync("
 Task t4 = http.GetAsync("
 Task t5 = http.GetAsync("
 Task t6 = http.GetAsync("
 Task t7 = http.GetAsync("
 // Liste aus Tasks
 List> taskList = new() { t1, t2, t3, t4, t5, t6, t7 };
 // WhenEach() gibt es seit .NET 9.0
 IAsyncEnumerable> taskList2 = Task.WhenEach(taskList);
 
 // NEU in .NET 10.0: LINQ auf IAsyncEnumerable
 taskList2 = taskList2.Where(x => x.Result.RequestMessage.RequestUri.ToString().Contains("dot"));
 taskList2 = taskList2.OrderBy(x => x.Result.RequestMessage.RequestUri.Host);

 await foreach (Task t in taskList2)
 {
  try
  {
   Console.WriteLine($"{DateTime.Now.ToLongTimeString()}: {t.Status} {t.Result?.RequestMessage?.RequestUri} = {t?.Result?.StatusCode}"); // Status des HTTP-Aufrufs
  }
  catch (Exception ex)
  {
   CUI.Warning(ex);
  }
 }
}



(rme)



Source link

Entwicklung & Code

Visual Studio Code 1.123 synchronisiert Agenten-Sessions über Geräte hinweg


close notice

This article is also available in
English.

It was translated with technical assistance and editorially reviewed before publication.

Microsoft bringt in Version 1.123 von Visual Studio Code weitere neue Features für den Umgang mit großen Sprachmodellen. Dazu gehören synchronisierte Chat-Sessions über mehrere Geräte hinweg, ein vergrößertes Kontextfenster für spezielle Modelle und die Möglichkeit, multiple Agenten-Fenster parallel zu öffnen.

Weiterlesen nach der Anzeige

Als neue Standardfunktion synchronisiert Visual Studio Code nun Chat-Sessions zum GitHub-Account seiner Nutzerinnen und Nutzer, inklusive aller lokalen Agenten-Sessions. Wie Microsoft betont, seien die synchronisierten Chats privat, außer wenn Nutzer sie explizit teilen. Auf github.com erscheinen die Chats im Agents-Tab eines Repositories und lassen sich durchsuchen.

Wer die Synchronisierung nicht nutzen will, setzt die auf Organisationsebene bestehende Einstellung chat.sessionSync.enabled auf false.

Das Preview-Feature Agents Window hat eine neue Funktion erhalten: Neben einer geöffneten Agenten-Session lässt sich nun eine zusätzliche in „Side by Side“-Ansicht öffnen. Um eine weitere Session zu öffnen, wählen Entwicklerinnen und Entwickler im Kontextmenü einer Session innerhalb der Session-Liste Open to the Side aus, ziehen die gewünschte Session per Drag & Drop in den Sessions-Ansichtsbereich oder wählen sie bei gedrückter Alt-Taste aus.

Dabei ist zu beachten, dass jeweils nur eine der sichtbaren Sessions aktiv ist. Eine neue ausgewählte Session wird automatisch zur aktiven Session View, außer wenn die vorherige Session angepinnt wurde. Das Anpinnen erfolgt über die Pin-Aktion in der oberen rechten Ecke der View.

Weiterlesen nach der Anzeige


VS Code 1.123: Zwei Agenten-Sessions – hier eine Claude-Opus- und eine Claude-Sonnet-Session – lassen sich nebeneinander betrachten.

VS Code 1.123: Zwei Agenten-Sessions – hier eine Claude-Opus- und eine Claude-Sonnet-Session – lassen sich nebeneinander betrachten.

VS Code 1.123: Zwei Agenten-Sessions – hier eine Claude-Opus-4.8- und eine Claude-Sonnet-4.6-Session – lassen sich nebeneinander betrachten.

(Bild: Microsoft)

Ein weiteres Update betrifft das Kontextfenster unterstützter Anthropic- und OpenAI-Modelle: Es kann nun eine Million Token umfassen. Diese Erweiterung soll es Usern ermöglichen, mit deutlich größeren Codebasen zu arbeiten sowie längere Konversationen zu führen, ohne wichtigen Kontext einzubüßen.

Weitere Details zu den Neuerungen in Visual Studio Code 1.123 lassen sich der Ankündigung entnehmen.

Dabei handelt es sich nicht um die einzigen Updates im Bereich KI von Microsoft: Im Rahmen der in dieser Woche stattgefundenen Hauskonferenz Microsoft Build wurde unter anderem eine eigenständige Desktopanwendung für GitHub Copilot vorgestellt.


(mai)



Source link

Weiterlesen

Entwicklung & Code

Cloudflare kauft Vite: Open Source und herstellerneutral – mit Millionenfonds


Cloudflare übernimmt VoidZero, das Unternehmen hinter den JavaScript-Werkzeugen Vite, Vitest, Rolldown, Oxc und Vite+. Das gab der Cloud- und Netzwerkdienstleister am Donnerstag in einem Blogbeitrag bekannt. Mit der Übernahme wechselt auch das gesamte VoidZero-Team um Gründer Evan You zu Cloudflare. Zu den finanziellen Konditionen machen beide Unternehmen keine Angaben. Auch zum Zeitplan, zu möglichen behördlichen Genehmigungen und zu weiteren Abschlussbedingungen gibt es bislang keine weiteren Informationen.

Weiterlesen nach der Anzeige

Für Entwickler dürfte vor allem die Zukunft der Open-Source-Projekte zählen. Hier betonen Cloudflare und VoidZero explizit, dass Vite, Vitest, Rolldown, Oxc und Vite+ quelloffen, herstellerneutral und community-getrieben bleiben sollen. Die Projekte bleiben demnach wie gehabt Open-Source-Software. Und Anwendungen, die auf Vite aufbauen, sollen sich weiterhin unabhängig von Cloudflare auch auf anderen Plattformen betreiben lassen.

VoidZero stammt von Evan You, der auch das JavaScript-Framework Vue.js entwickelt hat. Das Unternehmen baut eine ganze Reihe von Werkzeugen für moderne Webanwendungen. Dazu gehören das Build- und Entwicklungswerkzeug Vite, das Test-Framework Vitest, der in Rust geschriebene Bundler Rolldown sowie die ebenfalls in Rust entwickelte Toolchain Oxc, die Komponenten zum Parsen, Linten und Formatieren von JavaScript- und TypeScript-Code mitbringt. Mit Vite+ will VoidZero diese Werkzeuge unter einer einheitlichen Toolchain zusammenführen.

Vor allem Vite hat sich in den vergangenen Jahren zu einer zentralen Infrastruktur des JavaScript-Ökosystems entwickelt. Das Werkzeug treibt längst nicht mehr nur Vue-Projekte an, sondern bildet auch die Grundlage zahlreicher Frameworks und Meta-Frameworks wie Nuxt, SvelteKit, Astro, Solid, Qwik oder Angular. Auch mehrere React-basierte Werkzeuge setzen inzwischen auf Vite.

Cloudflare will zusätzliche Ressourcen in die Weiterentwicklung der Projekte stecken. Die Leitung sollen weiterhin Evan You und das bisherige VoidZero-Team übernehmen. Darüber hinaus richtet das Unternehmen einen Fonds über eine Million US-Dollar für das Vite-Ökosystem ein. Damit will Cloudflare Maintainer und weitere Community-Mitglieder unterstützen. Verwalten soll den Fonds das Vite-Kernteam. Ähnlich verfuhr Cloudflare eigenen Angaben zufolge bereits Anfang 2026 beim Web-Framework Astro: Auch dessen Team wechselte zu Cloudflare, ebenfalls unter Beibehaltung der Open-Source-Ausrichtung.

Weiterlesen nach der Anzeige

Hinter der Übernahme steckt eine Zusammenarbeit der Unternehmen, die schon länger läuft. Cloudflare und das Vite-Team arbeiten nach eigenen Angaben seit 2024 zusammen, unter anderem an der Environment API. Sie erlaubt es, Server-Code während der lokalen Entwicklung in anderen Laufzeitumgebungen als Node.js auszuführen.

Damit adressiert die Schnittstelle ein altbekanntes Problem: Viele Anwendungen entstehen lokal unter Node.js, laufen in der Produktion aber in einer anderen Laufzeitumgebung. Genau diese Unterschiede zwischen Entwicklung und Produktion führen immer wieder zu Fehlern. Über die Environment API können Anbieter ihre eigenen Laufzeiten direkt in den lokalen Entwicklungsprozess einklinken. Bei Cloudflare übernimmt das die quelloffene Laufzeitumgebung workerd, die auch den Dienst Cloudflare Workers antreibt.

Die Übernahme soll außerdem die künftige Entwicklerplattform von Cloudflare prägen. Das Unternehmen will seine Werkzeuge stärker an Vite ausrichten. So soll das neue Cloudflare-CLI-Tool cf langfristig auf Vite-Workflows aufsetzen. Lokale Entwicklung, Builds und das Deployment auf die Cloudflare-Plattform würden dadurch enger zusammenrücken.

Auch für Vite selbst kündigen die Unternehmen weitergehende Pläne an. Das Projekt soll künftig stärker Full-Stack-Anwendungen unterstützen. Geplant sind unter anderem allgemeine Schnittstellen für Backends, APIs, Deployments und KI-Agenten. Diese Erweiterungen sollen aber plattformneutral bleiben und nicht exklusiv an Cloudflare-Dienste gebunden sein.


(fo)



Source link

Weiterlesen

Entwicklung & Code

Perplexity verteilt automatisiert KI-Rechenbedarf zwischen Gerät und Cloud


Perplexity hat einen Hybrid-Ansatz für KI-Inferenz angekündigt, der Aufgaben automatisch zwischen dem lokalen Rechner und Cloud-Servern aufteilt. Der sogenannte „Personal Computer“, Perplexitys Variante von persönlichen Desktop-Agenten, soll sensible Daten auf dem Gerät halten und rechenintensive Arbeit in die Cloud auslagern – ohne dass Nutzer vorab entscheiden müssen, wo etwas verarbeitet wird.

Weiterlesen nach der Anzeige

Perplexity beschreibt den neuen Dienst als kompaktes KI-Modell, das lokal auf dem Gerät läuft und entscheidet, welche Teile einer Anfrage dort verbleiben und welche an ein leistungsfähigeres Frontier-Modell in der Cloud gehen sollen. Als typische Anwendungsfälle nennt das Unternehmen den Umgang mit Finanzunterlagen, Gesundheitsinformationen und persönlichen Dateien – also Daten, die aus Datenschutzgründen das Gerät möglichst nicht verlassen sollten.

Ganz neu ist Perplexitys hybrider Ansatz nicht, andere Anbieter haben ähnliche Ansätze. Microsoft verfolgt zum Beispiel mit Copilot+ PCs und lokalen NPU-Funktionen ebenfalls einen Hybridkurs, auch wenn viele Copilot-Funktionen weiterhin eine Cloud-Verbindung benötigen.

Der wesentliche Unterschied liegt laut VentureBeat wohl im Anspruch, die Aufteilung vollautomatisch und aufgabenweise, teils auch während die Aufgabe läuft, vorzunehmen. Auf dem Level, auf dem Perplexity das auf der Computex demonstriert hat, sind andere Anbieter bisher nicht.

Ab Juli soll Personal Computer mit lokaler Inferenz verfügbar werden und dabei helfen, aktuell typische Zielkonflikte zwischen drei Faktoren zu reduzieren: Genauigkeit und komplexe Aufgaben erfordern die leistungsfähigsten, rechenintensiven Modelle, Datenschutz verlangt lokale Verarbeitung und Kosten verlangen einen effizienten Mix zwischen leistungsstarken und günstigen Modellen – je nach Aufgabe. Die Orchestrierung zwischen diesen Anforderungen sei das eigentliche Problem. Genau das wolle der Hybrid-Ansatz nun lösen.

Perplexity stellte den Hybrid-Orchestrator gemeinsam mit Intel vor. Der modellagnostische Orchestrierungsrahmen soll aber auch auf anderer lokaler Hardware laufen, darunter Nvidias RTX Spark. Konkrete Hardware-Mindestanforderungen – etwa zur nötigen NPU- oder GPU-Leistung – nennt Perplexity bislang nicht. Der Computerhersteller HP hat zum Beispiel für Microsofts hybrides Modell Copilot+ PC entschieden, dass Laptops für das Copilot+ PC-Label eine dedizierte Neural Processing Unit (NPU) von mindestens 40 TOPS benötigen.

Weiterlesen nach der Anzeige

Ebenso fehlen bei Perplexity noch technische Details zu den Routing-Regeln: Wie genau das lokale Modell entscheidet, welche Daten als sensibel gelten und welche Metadaten dennoch an Perplexity-Server übertragen werden könnten, bleibt offen.

Wie belastbar das Datenschutzversprechen im Alltag ist, lässt sich auch erst bewerten, wenn Perplexity technische Dokumentation zu Modellgrößen, Speicherbedarf und dem Umgang mit Telemetriedaten veröffentlicht.


(rie)



Source link

Weiterlesen

Beliebt