【发布时间】:2020-05-09 14:22:15
【问题描述】:
我想知道是否可以编写一个函数来“通过”一个 IAsyncEnumerable...也就是说,该函数将调用另一个 IAsyncEnumerable 函数并产生所有结果,而无需编写 foreach做吗?
我发现自己经常编写这种 Code Pattern。这是一个例子:
async IAsyncEnumerable<string> MyStringEnumerator();
async IAsyncEnumerable<string> MyFunction()
{
// ...do some code...
// Return all elements of the whole stream from the enumerator
await foreach(var s in MyStringEnumerator())
{
yield return s;
}
}
无论出于何种原因(由于分层设计),我的函数MyFunction 想要调用MyStringEnumerator,但随后无需干预即可产生所有内容。我必须继续编写这些foreach 循环才能做到这一点。如果是IEnumerable,我会返回IEnumerable。如果是 C++,我可以写一个宏来做。
最佳做法是什么?
【问题讨论】:
-
您的
...do some code...是否致电yield return?是await吗? -
MyStringEnumerator()里面有什么? -
为什么不只是
return MyStringEnumerator();? -
可能重复:Return IAsyncEnumerable from an async method。简短的回答:C# 中不支持省略
await foreach循环。
标签: c# c#-8.0 iasyncenumerable