private void ProcessManyWaves()
        {
            if (_mangoWaves != null && _mangoWaves.Count > 0)
            {
                var oneGroup = _mangoWaves.Dequeue();

                var context = new UserSearchLoadContext(oneGroup)
                {
                    SearchType = _searchType,
                };

                DataManager.Current.Load <UserSearch>(
                    context,
                    (results) =>
                {
                    if (results != null && results.NotYetFriends != null)
                    {
                        foreach (var entry in results.NotYetFriends)
                        {
                            var id = entry.UserId;
                            if (!_mangoResults.ContainsKey(id))     // slow
                            {
                                _mangoResults[id] = entry;
                            }
                        }

                        ProcessManyWaves();
                    }
                },
                    (bad) =>
                {
                    ProcessManyWaves();
                    // TODO: ...?
                });
            }
            else
            {
                _mangoWaves = null;

                // Done!
                if (_mangoResults != null && _mangoResults.Count > 0)
                {
                    var allResults = new List <CompactUser>(_mangoResults.Values);

                    var fake = new FakeUserSearch
                    {
                        NotYetFriends = allResults
                    };

                    UserSearch = fake;
                }

                _mangoResults = null;
            }
        }
        private void ProcessManyWaves()
        {
            if (_mangoWaves != null && _mangoWaves.Count > 0)
            {
                var oneGroup = _mangoWaves.Dequeue();

                var context = new UserSearchLoadContext(oneGroup)
                {
                    SearchType = _searchType,
                };

                DataManager.Current.Load<UserSearch>(
                    context,
                    (results) =>
                    {
                        if (results != null && results.NotYetFriends != null)
                        {
                            foreach (var entry in results.NotYetFriends)
                            {
                                var id = entry.UserId;
                                if (!_mangoResults.ContainsKey(id)) // slow
                                {
                                    _mangoResults[id] = entry;
                                }
                            }

                            ProcessManyWaves();
                        }
                    },
                    (bad) =>
                    {
                        ProcessManyWaves();
                        // TODO: ...?
                    });
            }
            else
            {
                _mangoWaves = null;

                // Done!
                if (_mangoResults != null && _mangoResults.Count > 0)
                {
                    var allResults = new List<CompactUser>(_mangoResults.Values);

                    var fake = new FakeUserSearch
                    {
                        NotYetFriends = allResults
                    };

                    UserSearch = fake;
                }

                _mangoResults = null;
            }
        }