private static async Task <List <ImportItem> > scanAccountAsync(ApiExtended apiExtended, Account account, LibraryOptions.ResponseGroupOptions libraryResponseGroups) { ArgumentValidator.EnsureNotNull(account, nameof(account)); Log.Logger.Information("ImportLibraryAsync. {@DebugInfo}", new { Account = account?.MaskedLogEntry ?? "[null]" }); logTime($"pre scanAccountAsync {account.AccountName}"); var dtoItems = await apiExtended.GetLibraryValidatedAsync(libraryResponseGroups, Configuration.Instance.ImportEpisodes); logTime($"post scanAccountAsync {account.AccountName} qty: {dtoItems.Count}"); return(dtoItems.Select(d => new ImportItem { DtoItem = d, AccountId = account.AccountId, LocaleName = account.Locale?.Name }).ToList()); }
private static async Task <List <ImportItem> > scanAccountsAsync(Func <Account, Task <ApiExtended> > apiExtendedfunc, Account[] accounts, LibraryOptions.ResponseGroupOptions libraryResponseGroups) { var tasks = new List <Task <List <ImportItem> > >(); foreach (var account in accounts) { // get APIs in serial b/c of logins. do NOT move inside of parallel (Task.WhenAll) var apiExtended = await apiExtendedfunc(account); // add scanAccountAsync as a TASK: do not await tasks.Add(scanAccountAsync(apiExtended, account, libraryResponseGroups)); } // import library in parallel var arrayOfLists = await Task.WhenAll(tasks); var importItems = arrayOfLists.SelectMany(a => a).ToList(); return(importItems); }