Could you help me to speed up/optimize this code:
// Get API Keys
var keys = xRoot.Elements("key").Select(key => new { ID = int.Parse(key.Attribute("id").Value), VerificationCode = key.Attribute("verificationCode").Value });
// Get status of account using API Key
var tasks = keys.Select(key => EveOnlineClient.GetAccountStatusAsync(key.ID, key.VerificationCode));
// Get info about API Key
// Each API key may contain one or more game characters
var tasks2 = keys.Select(key => EveOnlineClient.GetAPIKeyInfoAsync(key.ID, key.VerificationCode).ContinueWith(x =>
{
var characters = x.Result.Characters;
// Get the sheet for each character in each API key
var tasks3 = characters.Select(character => EveOnlineClient.GetCharacterSheetAsync(key.ID, key.VerificationCode, character.ID));
// Get skill in training for each character in each API key
var tasks4 = characters.Select(character => EveOnlineClient.GetSkillInTrainingAsync(key.ID, key.VerificationCode, character.ID));
Task.WaitAll(tasks3.ToArray());
Task.WaitAll(tasks4.ToArray());
}));
await Task.WhenAll(tasks.Concat(tasks2));
Every method of EveOnlineClient downloads XML to local cache if needed (if local cache has expired), parses it and returns as an object.