使用 CountAsync 或 AsyncEnumerable CountAwaitAsync 有什么区别?

Sve*_*ter 7 c# c#-8.0

使用 CountAsync 或 AsyncEnumerable CountAwaitAsync 有什么区别?

在AsyncEnumerable.cs中有:

public static ValueTask<int> CountAwaitAsync<[Nullable(2)] TSource>(
      [Nullable(1)] this IAsyncEnumerable<TSource> source,
      [Nullable(new byte[] {1, 1, 0})] Func<TSource, ValueTask<bool>> predicate,
      CancellationToken cancellationToken = default (CancellationToken));
Run Code Online (Sandbox Code Playgroud)
  1. 为什么名字里有await?
  2. 为什么只能用谓词来调用它?

两者对我来说都毫无意义,但我确信这是有道理的。我不明白。

Ren*_*nat 7

CountAsyncFunc<TSource, bool>适用于谓词 ( ) 同步的情况。

CountAwaitAsync适用于谓词是异步 lambda 的情况。因此它的签名是Func<TSource, ValueTask<bool>>. 使用默认谓词a => true不需要异步,所以我认为这就是这里没有默认谓词的原因。

更新:根据@Sir Rufo,Count Await Async 等待谓词,因此其名称中有 Await 。