/// <summary> /// Requests information about a user's collection in an asynchronous manner /// </summary> /// <param name="collectionRequest">Details of the request</param> /// <returns>A task which returns details of the user's collection</returns> public async Task <BGGResponse <BGGCollection> > GetCollectionAsync(BGGCollectionRequest collectionRequest) { if (string.IsNullOrEmpty(collectionRequest.Username)) { throw new ArgumentException("Null or empty username in collectionRequest"); } return(await CallBGGAsync <Collection, BGGCollection>("collection", collectionRequest, BGGFactory.CreateCollection)); }
private async static Task FetchUser(BGGClient client, string username, bool retry) { var request = new BGGCollectionRequest { Username = username }; var task = client.GetCollectionAsync(request); var response = await task; if (response.StatusCode == HttpStatusCode.Accepted) { if (retry) { Console.WriteLine("Waiting to get collection for {0}", username); Thread.Sleep(TimeSpan.FromSeconds(30)); await FetchUser(client, username, false); return; } else { Console.WriteLine("Failed to fetch collection at second attempt for {0}", username); } } var collection = response.Data; lock (LockObject) { foreach (var game in collection.Items) { var id = game.Id; GameNames[id] = game.Name; if (game.Owned) { var owners = Owners.GetOrCreate(id, () => new List<string>()); owners.Add(username); } if (game.WantToPlay) { var players = WantToPlay.GetOrCreate(id, () => new List<string>()); players.Add(username); } } } }