【发布时间】:2020-06-09 01:39:40
【问题描述】:
我想问是否有计划或存在方法来汇总IAsyncEnumerable 的回报?那么鉴于以下方法,为什么没有简洁的方法来汇总其结果?
public async IAsyncEnumerable<bool> GenerateAsyncEnumerable(int range)
{
foreach (var x in Enumerable.Range(0, range))
{
await Task.Delay(500 * x);
yield return x % 2 == 0;
}
}
当前情景
public async Task Main()
{
bool accum = true;
await foreach (var item in GenerateAsyncEnumerable(3))
{
accum &= item;
//have some side effects on each particular item of the sequence
}
Console.WriteLine($"Accumulator:{accum}");
}
所需场景
在给定自定义聚合Func 的情况下,我想聚合IAsyncEnumerable 的结果
public async Main()
{
bool result = await foreach (var item in GenerateAsyncEnumerable(3).Aggregate(true, (x, y) => x & y))
{
//have some side effects on each particular item of the sequence
}
}
P.S 我不喜欢(在第一种情况下)我必须添加一个额外的局部变量 accum 来收集可枚举的结果。我是否遗漏了什么,是否有一些我不知道的语法糖?
【问题讨论】:
-
你可以编写你自己的扩展方法来返回一个新的
IAsyncEnumerable? -
所有这些方法都是
System.Linq.Async的一部分,包括AggregateAsync。 -
正如@PanagiotisKanavos 提到的,库
System.Linq.Async下有扩展方法。其中之一是ToAsyncEnumerable,但在使用时要小心。见stackoverflow.com/questions/59956623/…
标签: c# aggregate c#-8.0 iasyncenumerable