public async Task <IEnumerable <BookFile> > GetBookFiles() { foreach (var reader in _readers) { _fileList.AddExtension(reader.Extension); _lookup.Add(string.Format(".{0}", reader.Extension), reader); } IEnumerable <string> list = await _fileList.GetFileList(); _messages.Write("Found {0} files", list.Count()); //var books = new List<BookFile>(); //foreach (var path in list) //{ // BookFile book = await ReadBookFile(path); // if (book != null) // books.Add(book); //} var allBookTasks = list.Select(async path => await ReadBookFile(path)); var allBooks = await Task.WhenAll(allBookTasks); var books = allBooks.Where(book => book != null).ToArray(); return(books); }