Есть ли удобный способ использовать асинхронную функцию как предикат оператора Where
на наблюдаемом?
Например, если у меня есть хорошая аккуратная, но возможно долгосрочная функция, определенная следующим образом:
Task<int> Rank(object item);
Есть ли трюк для передачи его на Where
и поддержания асинхронного выполнения? Как в:
myObservable.Where(async item => (await Rank(item)) > 5)
В прошлом, когда мне это нужно, я прибегал к использованию SelectMany
и проектировал эти результаты в новый тип вместе с исходным значением, а затем выполнял фильтрацию на основе этого.
myObservable.SelectMany(async item => new
{
ShouldInclude = (await Rank(item)) > 5,
Item = item
})
.Where(o => o.ShouldInclude)
.Select(o => o.Item);
Я думаю, что это ужасно нечитаемо, хотя я чувствую, что должен быть более чистый способ.