What to do while waiting for an async thread to complete

I keep hearing that you shouldn’t block the main/UI thread when you need to do something that takes a long-ish time – like a network data retrieval request. But what kinds of things do you present to the user while waiting for the long task to complete?

I have an app. You type a city name. You tap a button. The app makes an API call and gets the times of dusk, solar noon, dawn, sunset, etc. Then, I update the UI in a new view.

I kind of WANT to block the UI until the request is done. After all, they asked for the data. I don’t want them doing anything else in the UI that could screw that up.

So what should I present them with?

you can just present a “loading” screen (just an animated icon) to let them know that the data is still being fetched