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

Mozilla: Offene KI kommt an – das Geld aber nicht


Open-Source-KI hat nach Einschätzung von Mozilla einen Wendepunkt erreicht. Der Browserhersteller sieht offene Sprachmodelle nicht länger als technologisch deutlich unterlegen gegenüber proprietären Angeboten wie ChatGPT oder Claude. Laut dem ersten „State of Open Source AI“-Report beträgt der Leistungsabstand zu den führenden geschlossenen Modellen auf Basis der LMSYS Chatbot Arena nur noch rund 3,3 Prozentpunkte. Gleichzeitig seien die Inferenzkosten innerhalb von drei Jahren von rund 20 US-Dollar auf etwa 40 Cent pro Million Token gesunken.

Weiterlesen nach der Anzeige

Trotz dieser Entwicklung profitiert das Open-Source-Ökosystem wirtschaftlich bislang kaum. Mozilla zufolge kommen offene Modelle inzwischen auf etwa ein Drittel der realen KI-Nutzung, erzielen aber lediglich rund vier Prozent der Umsätze. Der Report basiert auf einer eigenen Analyse sowie einer weltweiten Umfrage unter mehr als 950 Entwicklern, die Mozilla gemeinsam mit dem Marktforschungsunternehmen SlashData durchgeführt hat.

Nach den Umfragedaten setzen 79 Prozent der befragten Entwickler offene KI-Modelle ein. In produktiven Umgebungen landen sie jedoch deutlich seltener: 51 Prozent haben Open-Source-Modelle produktiv eingeführt, während der Anteil bei proprietären Modellen 63 Prozent beträgt.

Mozilla führt diese Lücke weniger auf die Qualität der Modelle als auf fehlende Infrastruktur zurück. Die Autoren sehen Defizite vor allem bei Werkzeugen für den produktiven Betrieb, Standardisierung und Enterprise-Support. Als häufigste Hürden nennen die Befragten Infrastruktur- und Rechenkosten, Sicherheits- und Compliance-Anforderungen sowie den Aufwand für Betrieb und Skalierung. Auffällig sei zudem, dass der produktive Einsatz offener Modelle mit zunehmender Unternehmensgröße kaum zunehme – anders als bei proprietären Angeboten.

Nach Auswertung verschiedener Benchmarks haben offene Modelle in Bereichen wie Programmierung, allgemeinem Wissen und dem Befolgen von Anweisungen weitgehend zu proprietären Systemen aufgeschlossen. Vorteile sehen die Autoren für geschlossene Modelle weiterhin bei komplexen Reasoning-Aufgaben, langen Kontextfenstern und agentischen Anwendungen.

Regional sieht Mozilla Ostasien und insbesondere China bei der Einführung offener KI-Modelle vorn. Dort sei Open Source inzwischen Teil der nationalen KI-Strategie. Zugleich würden immer mehr Staaten ihre KI-Infrastruktur als strategische Ressource betrachten. Nach Angaben des Berichts wurden 2024 zwölf neue nationale KI-Strategien verabschiedet. Zudem hätten inzwischen 47 Staaten Einschränkungen für die Verarbeitung kritischer Daten im Ausland eingeführt.

Weiterlesen nach der Anzeige

Als wichtigste Entwicklung beschreibt Mozilla den Bedeutungsgewinn der Software rund um die eigentlichen KI-Modelle. Entscheidend sei zunehmend die sogenannte agentische Steuerungsschicht (Agentic Harness). Sie legt fest, auf welche Daten ein KI-Agent zugreifen darf, welche Werkzeuge er verwendet, welche Informationen er dauerhaft speichert und welche Aktionen er selbstständig ausführen kann.

Nach Einschätzung von Mozilla beeinflusst diese Schicht das Verhalten eines KI-Systems teilweise stärker als der Wechsel des zugrunde liegenden Sprachmodells. Wer diese Software kontrolliere, bestimme damit maßgeblich die Fähigkeiten und Grenzen von KI-Agenten.

Der Report warnt zugleich vor Sicherheits- und Governance-Problemen. Nutzer würden Anfragen von KI-Agenten in bis zu 93 Prozent der Fälle standardmäßig bestätigen. Mozilla sieht darin Anzeichen für eine zunehmende „Consent Fatigue“: Häufige Zustimmungsabfragen führten dazu, dass Nutzer Berechtigungen kaum noch kritisch prüfen.

Mozilla fordert deshalb stärkere Investitionen in Infrastruktur, Werkzeuge und Governance für offene KI. Zu den konkreten Empfehlungen des Reports zählen unter anderem der Aufbau eines offenen Agentic Harness, die Abkehr von proprietären Metering-Systemen sowie die Schaffung portabler Berechtigungsstandards für KI-Agenten. Andernfalls bestehe die Gefahr, dass sich zwar offene Modelle technisch etablierten, skalierbare KI-Plattformen aber dauerhaft von proprietären Anbietern dominiert würden.


(fo)



Source link

Weiterlesen

Entwicklung & Code

OpenSpec: Software von KI mit Spezifikationen entwickeln


Das Tool OpenSpec für Spec-driven Development führt in Version 1.6 einen Update-Befehl ein und unterstützt Projekte mit dem Coding-Agenten Oh My Pi und dem KI-Editor TRAE.

Weiterlesen nach der Anzeige

Mit dem neuen Befehl /opsx:update können Entwicklerinnen und Entwickler eine vorhandene, mit OpenSpec erzeugte Spezifikation vor der Implementierung ändern, ohne einen komplett neuen Anlauf nehmen zu müssen.

Außerdem erzeugt OpenSpec nun Kommandos und Skills für den CLI-Agenten Oh My Pi und für die KI-Entwicklungsumgebung TRAE von ByteDance. Für Prompts hat das OpenSpec-Team zudem die Genehmigungsregeln vereinfacht, die Entwickler jetzt pauschal im Vorfeld erteilen können. Auch die Validierung von Anforderungen an ein neues Projekt arbeitet laut Release Notes nun konsistenter.

Das Kommandozeilen-Tool OpenSpec organisiert KI-Projekte mit Spec-driven Development. Das heißt, Entwickler teilen dem Tool ihre Idee mit (/opsx:explore), wobei sich auch explizit bestehender Code einbinden lässt. Das Tool arbeitet also auch brown field.

Mit /opsx:propose erzeugt OpenSpec dann die Spezifikation in verschiedenen Ordnern und Markdown-Dateien. Die Spezifikation dient als Grundlage für die eigentliche Entwicklung und führt insbesondere KI-Agenten in die richtige Richtung. Eine Ablagemöglichkeit der Specs in einem Repo ist noch beta und soll als zentrale Single Source of Truth für ein Team dienen.

Weiterlesen nach der Anzeige

Sobald die Specs fertig sind und kein /opsx:update erforderlich war, startet man die Umsetzung mit /opsx:apply. Dabei arbeitet OpenSpec mit über 25 Tools zusammen, wie Antigravity, Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, Junie, Kiro, Mistral Vibe, Qwen Code und neu eben Oh My Pi sowie TRAE. Als Modelle für OpenSpec selbst empfiehlt der Herausgeber Codex 5.5 oder Opus 4.7.

OpenSpec läuft auf Node ab Version 20.19 und ist Open Source unter MIT-Lizenz. KI-Contributions sind willkommen, solange sie geprüft und mit Modellbezeichnung im Pull Request erfolgen.


(who)



Source link

Weiterlesen

Entwicklung & Code

Wiederverwendbare Rakete: China fängt erstmals Stufe auf


Erstmals holte das Land die erste Stufe einer Trägerrakete kontrolliert zurück. Die Stufe der neuen Rakete „Langer Marsch 10B“ wurde auf einer Plattform auf See aufgefangen, wie die staatliche Nachrichtenagentur Xinhua berichtete.

Weiterlesen nach der Anzeige

Es war der erste Flug der neuen Rakete. Xinhua sprach von einem „bedeutenden Durchbruch“. Ein von der Agentur veröffentlichtes Video zeigt, wie die Raketenstufe mit laufendem Triebwerk auf die Plattform zufliegt und nahezu senkrecht in ein hohes, rechteckiges Gerüst sinkt.

Nach Angaben der Zeitung „China Daily“ wartete das Rückholschiff „Linghangzhe“ („Pfadfinder“) auf die Raketenstufe. Das Schiff verfolgte sie und passte seine Position laufend an. Spezielle Metallhaken klappten schließlich aus und griffen in die gespannten Seile der Fangvorrichtung. Die Rakete war vom Weltraumbahnhof Hainan gestartet und brachte einen Satelliten in die vorgesehene Umlaufbahn.

China sei laut der staatlichen Zeitung damit nach den USA das zweite Land, das über eine zuverlässige Technik für wiederverwendbare Raketen verfüge. Zugleich sei weltweit erstmals die erste Stufe einer mit einer solchen Seil-Fangvorrichtung geborgen worden.

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.

Vor allem das US-Raumfahrtunternehmen SpaceX ist bei wiederverwendbaren Raketen deutlich weiter. China treibt die Entwicklung seit Jahren voran. Neben dem staatlichen Raumfahrtprogramm arbeiten auch mehrere private chinesische Unternehmen an der Technik, die es ermöglichen soll, Satelliten und andere Lasten günstiger ins All zu bringen.

Weiterlesen nach der Anzeige

Lesen Sie auch


(afl)



Source link

Weiterlesen

Beliebt