You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PageIterator Lambda函数中出现“Cannot implicitly convert type 'bool' to 'System.Threading.Tasks.Task<bool>'”错误的解决咨询

PageIterator Lambda函数中出现“Cannot implicitly convert type 'bool' to 'System.Threading.Tasks.Task'”错误的解决咨询

大家好,我遇到了一个让我摸不着头脑的编译错误,想请大家帮忙看看。

错误提示是:

Cannot implicitly convert type 'bool' to 'System.Threading.Tasks.Task'

对应的代码如下:

public async Task<IEnumerable<EmployeeViewModel>> GetMembersOf(GroupQueryViewModel model) 
{
    var graphClient = await GetGraphClient();
    var filter = GetFilterQuery(model);

    var groups = await graphClient.Groups.GetAsync(requestConfiguration =>
    {
        requestConfiguration.QueryParameters.Filter = filter;
        requestConfiguration.QueryParameters.Select = ["id"];
    });

    var groupIds = new List<string>();
    var pageIterator = PageIterator<Group, GroupCollectionResponse>.CreatePageIterator(
        graphClient,
        groups,
        (group) =>
        {
            groupIds.Add(group.Id);
            return true;
        },
        (req) =>
        {
            return req;
        });

    await pageIterator.IterateAsync();

    ConcurrentDictionary<string, EmployeeViewModel> allMembers = new ConcurrentDictionary<string, EmployeeViewModel>();
    Parallel.ForEachAsync(groupIds, async (id, cancellationToken) =>
    {
        var members = await graphClient.Groups[id].Members.GetAsync(requestConfiguration =>
        {
            requestConfiguration.QueryParameters.Select = [   
                "userPrincipalName", "displayName", "mail",
                "givenName", "surname", "photo"
            ];
        });

        var iterator = PageIterator<User, UserCollectionResponse>.CreatePageIterator(
            graphClient,
            members,
            (user) =>
            {
                if (allMembers.ContainsKey(user.Id))
                    return true;
                var nameParts = user.UserPrincipalName.Split('@');
                EmployeeViewModel employee = new EmployeeViewModel
                {
                    /* 实例化逻辑 */
                };
                allMembers.TryAdd(user.Id, employee);
                return true;
            },
            (req) =>
            {
                return req;
            });
        await iterator.IterateAsync();
    });

    return allMembers.Values;
}

我实在找不到问题所在:PageIterator明确说明它期望的是Func<User, bool>类型的委托,而且我的lambda函数里根本没有使用async/await,完全是同步逻辑,为什么编译器会要求返回Task<bool>呢?

我试过把lambda改成异步版本:

async (user) => 
{
    /* 原来的逻辑 */
}

但这也没用,还是会触发编译错误。

我猜问题可能出在代码运行的上下文里,但就是抓不住关键点。第一个处理Group的PageIterator运行完全正常,所以我怀疑是在循环里的问题?我还把Parallel.ForEachAsync换成了普通的foreach,结果还是一样的错误。

有没有大佬能指点一下我该怎么解决这个问题?

备注:内容来源于stack exchange,提问作者Puscas Raul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:33:13