C# – Les flux asynchrones

A partir de la version 8 du langage C#, il est possible de créer des flux asynchrones, autrement dit des méthodes qui retournent un ensemble de données / d’objets de manière asynchrone pouvant être consommées de manière asynchrone. Ces méthodes possèdent les caractéristiques suivantes :

  • Elles sont déclarées avec le mot clé async
  • Elles retournent un objet de type IAsyncEnumerable
  • Leur implémentation doit contenir une instruction yield return afin de retourner des données / objets

Voici un exemple :


class Program
{
static async Task Main(string[] args)
{
Console.Write("Numbers : ");

// Affiche la liste des nombres.
await foreach (int i in Program.GetNumbers())
{
Console.Write($"{i} ");
}
}

///

/// Retourne une liste de 10 nombres aléatoires compris entre 1 et 100.
///

public static async IAsyncEnumerable GetNumbers()
{
Random random = new Random();

for (int i = 1; i <= 10; i++) { await Task.Delay(1000); yield return random.Next(1, 100); } } }

La méthode GetNumbers() retourne une liste de 10 nombres compris entre 1 et 100, choisis de manière aléatoire. Avant de tirer au sort un nombre et le retourner, elle doit patienter une seconde. L’instruction yield return permet de retourner dans la collection de sortie chaque nombre.
Etant donné que cette méthode s’exécute de manière asynchrone, le code contenu dans la méthode Main poursuit son exécution et affiche les nombres au fur et à mesure qu’ils sont tirés au sort. Pour ce faire, la structure itérative foreach est précédée du mot clé await.
Ainsi, les performances d’exécution du code sont améliorées.

Étiquettes : ,

About: James RAVAILLE

Travaillant avec la plateforme Microsoft .NET depuis 2002, j'alterne les missions de formation et d'ingénierie avec cette plateforme. J'écris ce blog pour transmettre mes connaissances à tout développeur, qu'il soit débutant ou expérimenté.