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
相关产品推荐
相关产品推荐

