private static async Task <List <ImportItem> > scanAccountAsync(Api api, Account account) { ArgumentValidator.EnsureNotNull(account, nameof(account)); Log.Logger.Information("ImportLibraryAsync. {@DebugInfo}", new { Account = account?.MaskedLogEntry ?? "[null]" }); var dtoItems = await AudibleApiActions.GetLibraryValidatedAsync(api); 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, ILoginCallback> loginCallbackFactoryFunc, Account[] accounts) { var tasks = new List <Task <List <ImportItem> > >(); foreach (var account in accounts) { var callback = loginCallbackFactoryFunc(account); // get APIs in serial, esp b/c of logins var api = await AudibleApiActions.GetApiAsync(callback, account); // add scanAccountAsync as a TASK: do not await tasks.Add(scanAccountAsync(api, account)); } // import library in parallel var arrayOfLists = await Task.WhenAll(tasks); var importItems = arrayOfLists.SelectMany(a => a).ToList(); return(importItems); }