I have an ASP.NET Core Web API project. That has one controller with a method called GetLocations

GetLocations connects to 5 other web services on the internet. Gathers some info and return a collection via json. In this method I am caching the data every 5 mins using In Memory caching. 

If the cache expires, it tries to connect to all 5 services and get the info and so on.

My problem is:

I have a lot of users requesting this data constantly, 50 requests a second to this API.

When the cache expires I believe there is some kind of thread locking. I have limited visibility into the project at the moment but I suspect that all these requests are calling the method and reaching out to the 5 dependent services until one of them gets a completed response from all 5.

Is my assumption right? If so how can I go about fixing this? Will I need to make each call to the web services async? Will that help this scenario? I am not 100% sure because the requests are what triggers the method call.