You are not using async/await in a foreach loop, you are using async/await with List<T>.ForEach(Action<T>). Because ForEeachForEach only accepts Action<T> (void return type) your ForEach(async d => { ... } is being processed as a async void function because that is the only way for it to be passed in as a Action<T>. This makes ForEach not wait for the previous item to finish before moving to the next item and that is what causes your error.
Use a normal foreach instead of the List<T>.ForEach method and it should work fine.
if (hasDocuments) { // HTTP GET client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*")); foreach (var d in returnValue.Result.SearchResults) { response = await client.GetAsync(d.Self + ".pdf"); }; } The only time you are allowed to use async d => ... is when the function you are passing in to takes in a Func<T,Task> (See Task.Run as an example).