If a method is marked as async, does that come with any guarantees?
If not, what are the best practices for calling async methods to ensure non-blocking behaviour? (especially when calling a third-party library)
Longer version:
Until now, I assumed that awaiting an async method is guaranteed not to block the thread (if implemented correctly). However, I recently had this situation (also happened to others). In this instance, the (non)blocking behaviour depends on the EF provider. Since the UI layer shouldn't really know or care about the DB provider implementation details, I suppose it makes sense to wrap all calls in Task.Run to ensure non-blocking bahaviour. But then I don't need async anywhere except the UI layer which makes me question the philosophy of having async all the way through.