IAsyncEnumerable को सूची में बदलें


18

इसलिए C # 8 में हमें IAsyncEnumerableइंटरफ़ेस का जोड़ मिला ।

यदि हमारे पास एक सामान्य है IEnumerableतो हम Listया उससे बहुत अधिक किसी भी अन्य संग्रह को बना सकते हैं जिसे हम चाहते हैं। आभार लिनक वहाँ।

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

खैर अब मैं अपने कनवर्ट करना चाहते हैं IAsyncEnumerableएक करने के लिए Listऔर निश्चित रूप से एसिंक्रोनस रूप से इस। क्या उस मामले के लिए पहले से ही Linq कार्यान्वयन हैं? अगर वहाँ नहीं है, तो मैं इसे स्वयं कैसे बदल सकता हूं?

जवाबों:


26

ज़रूर - आपको बस उस ToListAsync()विधि की ज़रूरत है , जो System.Linq.AsyncNuGet पैकेज में है । यहाँ एक पूर्ण उदाहरण है:

प्रोजेक्ट फ़ाइल:

<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 फ्रेमवर्क का हिस्सा नहीं है।
बीस

4
@ समय: एक अलग पैकेज के रूप में, यह आसानी से वापस मंच पर प्लेटफार्मों पर प्रयोग करने योग्य है।
जॉन स्कीट

@JonSkeet इस पैकेज और Ado.Net कोर का उपयोग करते समय यह त्रुटि हो जाती है।
ca9163d9

@ ca9163d9: "यह त्रुटि प्राप्त करता है" वास्तव में बहुत अधिक जानकारी प्रदान नहीं करता है। मेरा सुझाव है कि आप एक नया प्रश्न एक पूर्ण न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण के साथ पूछें ।
जॉन स्कीट

@JonSkeet, अभी इसे पुन: पेश किया। await iOrderedQueryable.ToListAsync(cancellationToken)नगेट पैकेज को जोड़ने के बाद यह विफल हो गया। मेरे द्वारा नगेट पैकेज निकालने के बाद त्रुटि हो गई है।
ca9163d9
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.