【发布时间】:2020-03-21 09:44:57
【问题描述】:
我在测试 C# 8.0 功能时遇到了 IAsyncEnumerable。我从 Anthony Chu (https://anthonychu.ca/post/async-streams-dotnet-core-3-iasyncenumerable/) 那里找到了非凡的例子。它是异步流和Task<IEnumerable<T>>的替代品
// Data Access Layer.
public async IAsyncEnumerable<Product> GetAllProducts()
{
Container container = cosmosClient.GetContainer(DatabaseId, ContainerId);
var iterator = container.GetItemQueryIterator<Product>("SELECT * FROM c");
while (iterator.HasMoreResults)
{
foreach (var product in await iterator.ReadNextAsync())
{
yield return product;
}
}
}
// Usage
await foreach (var product in productsRepository.GetAllProducts())
{
Console.WriteLine(product);
}
我想知道这是否可以应用于读取文本文件,如下所示,逐行读取文件。
foreach (var line in File.ReadLines("Filename"))
{
// ...process line.
}
我真的很想知道如何将 async with IAsyncEnumerable<string>() 应用到上面的 foreach 循环中,以便它在读取时流式传输。
如何实现迭代器,以便可以使用 yield return 逐行读取?
【问题讨论】:
标签: c# system.io.file c#-8.0 iasyncenumerable