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 Search(string query)
        {
            _searchedFor = query;

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

            DataManager.Current.Load <UserSearch>(
                context,
                (results) =>
            {
                UserSearch = results;
            },
                (bad) =>
            {
                UserSearch = null;
            });
        }