Ainsi, en C # 8, nous avons obtenu l'ajout de l'interface IAsyncEnumerable
.
Si nous avons un IEnumerable
normal, nous pouvons en faire un List
ou à peu près n'importe quelle autre collection que nous voulons. Merci à Linq là-bas.
var range = Enumerable.Range(0, 100);
var list = range.ToList();
Eh bien maintenant, je veux convertir mon IAsyncEnumerable
en List
et cela bien sûr de manière asynchrone. Existe-t-il déjà des implémentations Linq pour ce cas? S'il n'y en a pas, comment pourrais-je le convertir moi-même alors?
Bien sûr - vous avez juste besoin de la méthode ToListAsync()
, qui se trouve dans la System.Linq.Async
Package NuGet . Voici un exemple complet:
Fichier de projet:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Linq.Async" Version="4.0.0" />
</ItemGroup>
</Project>
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
IAsyncEnumerable<string> sequence = GetStringsAsync();
List<string> list = await sequence.ToListAsync();
Console.WriteLine(list.Count);
}
static async IAsyncEnumerable<string> GetStringsAsync()
{
yield return "first";
await Task.Delay(1000);
yield return "second";
await Task.Delay(1000);
yield return "third";
}
}