Nou Generator de prompt AI — scrie prompturi mai bune pentru ChatGPT, Claude și Gemini →

Streaming Asincron cu IAsyncEnumerable în C# în C# (.NET)

Consumul și emiterea fluxurilor continue de date pe măsură ce sosesc de la rețea sau baze de date, fără a aștepta încărcarea întregii liste în memorie.

Sintaxă C#
async IAsyncEnumerable<T> Metoda() { yield return ... }

În mod tradițional, când o metodă asincronă returna o listă de date (`Task>`), aplicația client trebuia să aștepte ca toate cele 10.000 de înregistrări să fie descărcate și încărcate în memorie înainte de a putea procesa primul rând.

Interfața IAsyncEnumerable<T> aduce conceptul de Streaming Asincron nativ în C#. Combină modelul iteratorilor `yield return` cu execuția non-blocantă `await`.

Producătorul emite fiecare element de date imediat ce a fost citit de la serverul SQL sau din fluxul API, iar consumatorul îl procesează instantaneu printr-o buclă await foreach. Este tipul ideal pentru streaming-ul de tokeni de la modele LLM sau exportul rapoartelor gigantice de baze de date.

Sintaxă, opțiuni și concepte cheie

Opțiune / Concept Descriere practică
IAsyncEnumerable Interfața oficială ce permite iterarea asincronă peste o secvență continuă de elemente.
await foreach (var item in stream) Construcția de limbaj ce consumă elementele pe măsură ce devin disponibile.
yield return valoare Emite următorul element din flux și suspendă execuția până când consumatorul cere următorul rând.
[EnumeratorCancellation] Atributul ce permite propagarea corectă a tokenului de anulare (`CancellationToken`).

Exemple practice și cod

Exemplul 1: Streaming de tokeni dintr-un API AI în timp real cu IAsyncEnumerable

Cum se generează și se consumă un flux asincron continuu.

// 1. Metoda producător care emite date pe măsură ce sosesc din rețea:
public static async IAsyncEnumerable StreamChatAsync([EnumeratorCancellation] CancellationToken ct = default)
{
    string[] cuvinte = ["Inteligența", "artificială", "avansează", "la", "viteze", "uimitoare."];
    foreach (var cuvant in cuvinte)
    {
        await Task.Delay(200, ct); // Simulăm latența de rețea între tokeni
        yield return cuvant + " ";
    }
}

// 2. Metoda consumator care afișează fiecare cuvânt instantaneu:
await foreach (var token in StreamChatAsync())
{
    Console.Write(token); // Textul curge pe ecran fluid!
}

Rezultat & Impact

Utilizatorul vede primele rezultate imediat fără nicio întârziere resimțită.

Greșeli frecvente și bune practici

  • Omiterea parametrului `CancellationToken` la metodele care generează `IAsyncEnumerable`, făcând imposibilă oprirea streaming-ului dacă utilizatorul apasă butonul ‘Stop’.
  • Apelarea metodei `ToList()` pe un `IAsyncEnumerable`, forțând așteptarea întregului flux și anulând complet beneficiul de streaming.

Ghiduri și noțiuni înrudite

Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Streaming Asincron cu IAsyncEnumerable în C#

Ai o nelămurire despre utilizarea comenzii Streaming Asincron cu IAsyncEnumerable în C# sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.