gpt4 book ai didi

C# 在 Enumerable.All 扩展中使用带有返回 bool 的异步 lambda 表达式

转载 作者:行者123 更新时间:2023-12-04 00:54:00 27 4
gpt4 key购买 nike

我有以下异步方法

private async Task<bool> HasPolicy(AuthorizationFilterContext context, string policy)
{
var authorized = await _authorization.AuthorizeAsync(context.HttpContext.User, policy);
return authorized.Succeeded;
}

我想在 Enumerable.AllEnumerable.Any 扩展中使用它

var result1 = IsAndPolicy
? policys.All(async x => await HasPolicy(context, x))
: policys.Any(async x => await HasPolicy(context, x));

但是上面的代码出现如下错误

Error CS4010 Cannot convert async lambda expression to delegate type 'Func<string, bool>'. An async lambda expression may return void, Task or Task, none of which are convertible to 'Func<string, bool>'.

最佳答案

一种方法是投影IEnumerable<Task<bool>>

var results = await Task.WhenAll(policys.Select(x => HasPolicy(context, x)));

var result1 = IsAndPolicy
? results.All(x => x)
: results.Any(x => x);

这种方法的问题在于,您可能会不必要地处理所有项目。

关于C# 在 Enumerable.All 扩展中使用带有返回 bool 的异步 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64098168/

27 4 0