Parallel Calls to External WCF Service - ASP.NET Web Api
I think instead of creating an unknown amount of task using PLinq would make it simpler and have control over the number of task inflight/created
something like
var result = model.Materials
                .AsParallel()
                .WithDegreeOfParallelism(8) // whatever you want or leave it out 
                .Select(material =&gt; _materials.Get(material.Number));

model.MaterialModels.AddRange(result);

This way it's not trying to make synchronous code async and can limit the amount of task inflight vs unlimited amount.