Я пытаюсь получить список всех пользователей в нашем экземпляре Desire2Learn, используя циклическую структуру через закладки, однако по какой-то причине он постоянно зацикливается и не возвращается. Когда я отлаживаю его, он показывает огромное количество пользователей (намного больше, чем у нас в системе, как показывает инструмент управления пользователями. Часть моего кода здесь:
public async Task<List<UserData>> GetAllUsers(int pages = 0)
{
//List<UserData> users = new List<UserData>();
HashSet<UserData> users = new HashSet<UserData>();
int pageCount = 0;
bool getMorePages = true;
var response = await Get<PagedResultSet<UserData>>("/d2l/api/lp/1.4/users/");
var qParams = new Dictionary<string, string>();
do
{
qParams["bookmark"] = response.PagingInfo.Bookmark;
//users = users.Concat(response.Items).ToList<UserData>();
users.UnionWith(response.Items);
response = await Get<PagedResultSet<UserData>>("/d2l/api/lp/1.4/users/", qParams);
if (pages != 0)
{
pageCount++;
if (pageCount >= pages)
{
getMorePages = false;
}
}
}
while (response.PagingInfo.HasMoreItems && getMorePages);
return users.ToList();
}
Первоначально я использовал контейнер List, который закомментирован, но просто переключился на HashSet, чтобы посмотреть, смогу ли я заметить, добавляются ли дубликаты.
Это довольно просто, но по какой-то причине это не работает. Метод Get<PagedResultSet<UserData>>()
просто оборачивает логику HTTP-запроса. Ставим закладку каждый раз и отправляем дальше.
Инструмент управления пользователями показывает, что в системе 39 695 пользователей. Проработав всего пару минут и прервав UnionWith
в цикле, я показываю, что в моем наборе 211 800 пользователей.
Что мне не хватает?