コード例 #1
0
ファイル: LibraryCommands.cs プロジェクト: Mulchman/Libation
        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());
        }
コード例 #2
0
ファイル: LibraryCommands.cs プロジェクト: Mulchman/Libation
        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);
        }