I feel that I have a good grasp on how Wait and WaitAsync work. I understand that Wait() will block the thread while it waits for the Semaphore to become available. On the other hand WaitAsync() will return that thread to the thread pool so it may continue to be used while waiting for the Semaphore.
I'm hoping someone can explain under what conditions would you choose Wait() over WaitAsync()? Is it advantageous in certain situations to make absolutely sure that the code continues executing on the same thread by calling Wait()? I can't seem to find any good reason to use the Wait() method as this just blocks the thread which looks to me to be a waste of resources.
Quoting another poster replying to a similar question https://stackoverflow.com/a/44306177/13274736: "If you have async method - you want to avoid any blocking calls if possible. SemaphoreSlim.Wait() is a blocking call. So what will happen if you use Wait() and semaphore is not available at the moment? It will block the caller, which is very unexpected thing for async methods"
Why would we want to avoid blocking calls and why would this be unexpected for async methods?
Thank you for any help!