private const int GameCacheDuration = 43200; // 12 hours
public async Task<GameDetails[]> ParallelLoadGames(IEnumerable<int> gameIds)
{
GameDetails[] results;
var tasks = new List<Task<GameDetails>>();
using (var throttler = new SemaphoreSlim(5))
{
foreach (var gameId in gameIds)
{
await throttler.WaitAsync();
tasks.Add(Task<GameDetails>.Run(async () =>
{
try
{
Debug.WriteLine("Loading {0}...", gameId);
return await this.LoadGame(gameId, true);
}
finally
{
Debug.WriteLine("Done with {0}...", gameId);
throttler.Release();
}
}));
}
results = await Task.WhenAll(tasks);
}
return results;
}