In earlier chapters, we've discussed the benefits of chaining services together in an asynchronous fashion. I'm sure that for many developers, deciding upon asynchronous communication requires an enormous leap of faith. It feels much safer to simply make a linear series of synchronous calls where our client application only advances once we are assured that our message reached its destination. However, if you remain hesitant to embrace asynchronous patterns, consider the wide range of benefits you will be missing out on. These benefits are:
No client blocking: By definition, a synchronous operation requires the caller to block and wait for the operation to return its expected response. The code can perform no other tasks. In an asynchronous model, the client engages in "fire-and-forget" behavior and relies on other mechanisms to determine any desired results from the service invocation.
Support for long-running processes: This relates to the previous...