如何解决在 IAsyncEnumerable 函数的返回类型中使用异步是否有价值?
我们正在为 IAsyncEnumerable
编写扩展程序。我们的最终目标是能够使用 System.Linq.Async
。不幸的是,当前的命名空间冲突使我们无法这样做。与此同时,我们正在编写自己的代码,并尽可能地符合他们的签名,以便尽可能轻松地进行换入/换出。
我们注意到一种模式,但不知道它为什么是一件事,或者它是否重要。考虑以下两个函数。
public static IAsyncEnumerable<TSource> Concat<TSource>(this IAsyncEnumerable<TSource> source,IAsyncEnumerable<TSource> sequence) {
return Core(source,sequence);
static async IAsyncEnumerable<TSource> Core(IAsyncEnumerable<TSource> source,IAsyncEnumerable<TSource> sequence) {
await foreach (var item in source) {
yield return item;
}
await foreach (var item in sequence) {
yield return item;
}
}
}
和
public static async IAsyncEnumerable<TSource> ConcatAsync<TSource>(this IAsyncEnumerable<TSource> source,IAsyncEnumerable<TSource> sequence) {
await foreach (var item in source) {
yield return item;
}
await foreach (var item in sequence) {
yield return item;
}
}
System.Linq.Async
在其大部分/所有扩展中使用前者。我们不知道为什么会这样。为什么不简单地像前者那样写呢?最后,这两者之间有什么区别?一个似乎只是简单地包装另一个以从签名中删除 async
。我们使用 C#9 作为上下文。我们应该使用哪个,为什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。