Microsoft Graph Page Iterator асинхронная/неасинхронная лямбда-функцияC#

Место общения программистов C#
Ответить
Anonymous
 Microsoft Graph Page Iterator асинхронная/неасинхронная лямбда-функция

Сообщение Anonymous »

Кто-нибудь знает, почему в следующем блоке кода внутри лямбда-функции PageIterator я получаю следующую ошибку:

Код: Выделить всё

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

Код: Выделить всё

   public async Task 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();
var pageIterator = PageIterator.CreatePageIterator(
graphClient,
groups,
(group) =>
{
groupIds.Add(group.Id);
return true;
},
(req) =>
{
return req;
});

await pageIterator.IterateAsync();

ConcurrentDictionary allMembers = new ConcurrentDictionary();
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.CreatePageIterator(
graphClient,
members,
(user) =>
{
if (allMembers.ContainsKey(user.Id))
return true;
var nameParts = user.UserPrincipalName.Split('@');
EmployeeViewModel employee = new EmployeeViewModel
{
/* Creation logic */
};
allMembers.TryAdd(user.Id, employee);
return true;
},
(req) =>
{
return req;
});
await iterator.IterateAsync();
});

return allMembers.Values;
}
Кажется, я не могу найти способ обойти это.

PageIterator правильно заявляет, что он ожидает Function.
Внутри лямбды нет вызова async/await, поэтому я не понимаю, почему он ожидает, что возвращаемое значение будет Task.
Я попробовал это:

Код: Выделить всё

async (user) =>
{
/* Same logic */
}
Но это также ошибочно и генерирует ошибку компилятора.

Кто-нибудь знает, что я могу сделать, чтобы это исправить?
Я предполагаю, что это происходит из контекста, в котором он выполняется, но я не могу понять это.
Поскольку первый PageIterator для групп работает нормально, мое единственное предположение состоит в том, что это происходит в результате выполнения внутри оператора foreach.
Я попробовал поменять местами

Код: Выделить всё

Parallel.ForEach(...)
с

Код: Выделить всё

foreach(...)
Но тем не менее эффект тот же.

Подробнее здесь: https://stackoverflow.com/questions/799 ... a-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»