var tasks = new List<Task<TMDbLib.Objects.Movies.Movie>>();
Parallel.ForEach(page, id =>
{
var movieFromTmdb = _tmdbClient.GetMovieAsync(id);
tasks.Add(movieFromTmdb);
});
await Task.WhenAll(tasks);
Or
var moviesBag = new ConcurrentBag<TMDbLib.Objects.Movies.Movie>();
await Parallel.ForEachAsync(page, async (movieId, token) =>
{
var movieFromTmdb = await _tmdbClient.GetMovieAsync(movieId, token);
moviesBag.Add(movieFromTmdb);
});
Edit
_tmdbClient.GetMovieAsync is a HTTP Rest call, I am doing pages of 200
The
Parallel.ForEachAsyncis the correct API to use. It's not a question of efficiency or performance. There is no comparison to do. TheParallel.ForEachis suitable for doing synchronous work only. Your work is asynchronous, so theParallel.ForEachis unsuitable. For parallelizing asynchronous work, use theParallel.ForEachAsync.