IAsyncEnumerable을 목록으로 변환


18

C # 8에서 IAsyncEnumerable인터페이스를 추가했습니다 .

우리가 법선을 가지고 있다면, 우리는 그것을 원하는 다른 컬렉션을 IEnumerable만들 수 있습니다 List. Linq에게 감사합니다.

var range = Enumerable.Range(0, 100);
var list = range.ToList();

이제는 내 IAsyncEnumerable를 a 로 변환하고 싶습니다 List. 물론 비동기식입니다. 해당 사례에 대해 이미 Linq 구현이 있습니까? 없는 경우 어떻게 직접 변환 할 수 있습니까?

답변:


26

물론 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";
    }
}

.Net Core 3.1 Framework의 일부가 아니라는 점이 흥미 롭습니다.
스물

4
@Twenty : 별도의 패키지로, 거꾸로 확장 된 플랫폼에서 쉽게 사용할 수 있습니다.
Jon Skeet

@JonSkeet이 패키지와 Ado.Net 코어를 사용할 때 오류가 발생합니다.
ca9163d9

@ ca9163d9 : "오류가 발생합니다"는 실제로 많은 정보를 제공하지 않습니다. 나는 최소한의 재현 가능한 예제 로 새로운 질문을 할 것을 제안한다 .
Jon Skeet

@JonSkeet, 지금 재현했습니다. await iOrderedQueryable.ToListAsync(cancellationToken)너겟 패키지를 추가 한 후 실패했습니다 . 너겟 패키지를 제거한 후 오류가 사라졌습니다.
ca9163d9
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.