gpt4 book ai didi

c# - LINQ 中的 Where 子句调用异步方法

转载 作者:行者123 更新时间:2023-12-05 01:04:21 30 4
gpt4 key购买 nike

我在一个定义为......的类中有一个方法。

public static async Task<int> GetDCountAsync(int dId)

我正在尝试在 LINQ Where 子句中调用此方法....

var excessD= dToConsider
.Where(async x => await myService.GetDCountAsync(x.Id) >= x.Threshold)
.Select(x => x.Id)
.ToArray();

仅供引用:阈值是一个整数。

我收到一个异步错误......

The return type of an 'async' anonymous function must be a 'void', 'Task', 'Task', ......

GetDCountAsync 的返回类型是异步任务。我哪里错了?提前致谢!

最佳答案

您可以使用 System.Linq.Async 中已有的功能。包装:

int[] excessD = await dToConsider
.ToAsyncEnumerable()
.WhereAwait(async x => await myService.GetDCountAsync(x.Id) >= x.Threshold)
.Select(x => x.Id)
.ToArrayAsync();

WhereAwait 操作符的签名:

// Filters the elements of an async-enumerable sequence based on
// an asynchronous predicate.
public static IAsyncEnumerable<TSource> WhereAwait<TSource>(
this IAsyncEnumerable<TSource> source,
Func<TSource, ValueTask<bool>> predicate);

异步方法 myService.GetDCountAsync 将被调用并 awaited 一次为一个元素,而不是同时为所有元素。

关于c# - LINQ 中的 Where 子句调用异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72177369/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com