4.2.4 Synchronous vs. Asynchronous Model
In general, it’s better to have a synchronous model. Blocking allows you to decide the threading policy. if you have an asynchronous model, you are stuck with the threading policy defined by the model, which may not be optimal. Also, it makes testing harder.