したがって、C#8ではIAsyncEnumerable
インターフェイスが追加されました。
通常のIEnumerable
があれば、List
またはその他のほぼすべてのコレクションを作成できます。そこでLinqに感謝します。
var range = Enumerable.Range(0, 100);
var list = range.ToList();
さて、私は自分のIAsyncEnumerable
をList
に、そしてもちろん非同期に変換したいと思います。その場合のLinq実装はすでにありますか?ない場合、どうすれば自分で変換できますか?
もちろん-ToListAsync()
メソッドが必要です System.Linq.Async
NuGetパッケージ 。以下は完全な例です。
プロジェクトファイル:
<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>
コード:
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";
}
}