C # 8에서 IAsyncEnumerable
인터페이스를 추가했습니다 .
우리가 법선을 가지고 있다면, 우리는 그것을 원하는 다른 컬렉션을 IEnumerable
만들 수 있습니다 List
. Linq에게 감사합니다.
var range = Enumerable.Range(0, 100);
var list = range.ToList();
이제는 내 IAsyncEnumerable
를 a 로 변환하고 싶습니다 List
. 물론 비동기식입니다. 해당 사례에 대해 이미 Linq 구현이 있습니까? 없는 경우 어떻게 직접 변환 할 수 있습니까?
답변
물론 NuGet 패키지ToListAsync()
에있는 메소드 만 있으면 System.Linq.Async
됩니다 . 다음은 완전한 예입니다.
프로젝트 파일 :
<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";
}
}