As far as I know and read, async and await should always go together, and should be used for all IO operations. I think you kind of have it wrong way round, not using await will "hog" the thread, and using it will put the thread back in the thread pool to be available for other things.
My understanding is that threads work as follows.
You have your main thread executing your code. This can be an HTTP request handler, main service / app thread or whatever.
In the old synchronous days, you would make a request to read a file, and your thread would wait while the OS reads the file with its own threads. Your app is using 1 thread that whole time. It's not really an issue usually, but for high load applications you can run out of threads in the .Net thread pool.
Now, using async methods with async / await, you have
Thread1 for your HTTP request / service / app. When you read a file with async/await, you release your thread while you wait for the file to be read, returning it to the pool. You application / http request now is not using any threads so other requests can use it. When the OS returns the file, you get a thread again to continue execution, so now you are using a thread again.
If you don't use await, you don't release your thread, so your app holds on to that thread until it finishes with whatever it's doing before releasing it. For example, if you write to an error file before returning an HTTP response and you don't use await, your thread will return the response before being released while the OS finishes with the file. You still get release your thread without waiting for anything to finish.
The "catch" is that you then can't react to the result of that write, so the response to the user can't depend on that write.