В чем разница при использовании CountAsyn c или AsyncEnumerable CountAwaitAsyn c? - PullRequest
1 голос
/ 17 марта 2020

Какая разница в использовании CountAsyn c или AsyncEnumerable CountAwaitAsyn c?

В 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));
  1. Почему есть ожидание в названии?
  2. Почему его можно назвать только предикатом?

И то, и другое не имеет смысла для меня, но я уверен, что в этом есть смысл. Я не понимаю.

1 Ответ

3 голосов
/ 17 марта 2020

CountAsync для случая, когда предикат (Func<TSource, bool>) является синхронным.

CountAwaitAsync для случая, когда предикат является асинхронной лямбда-выражением. Следовательно, его подпись Func<TSource, ValueTask<bool>>. С предикатом по умолчанию a => true асинхронность не требуется, поэтому я думаю, что здесь нет предиката по умолчанию.

Обновление: согласно @Sir Rufo, Count Await Asyn c ожидает предикат, поэтому в его имени есть Await.

...