我们正在为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 作为上下文。我们应该使用哪个,为什么?