Concurrency and exception handling with futures
While the program that we wrote in the previous section works, it is very brittle. It will crash if we enter a non-existent user name or the GitHub API changes or returns a badly-formatted response. We need to make it fault-tolerant.
What if we also wanted to fetch multiple users? The program, as written, is entirely single-threaded. The fetchUserFromUrl
method fires a call to the API and blocks until the API sends data back. A better solution would be to fetch multiple users in parallel.
As you learned in Chapter 4, Parallel Collections and Futures, there are two straightforward ways to implement both fault tolerance and parallel execution: we can either put all the user names in a parallel collection and wrap the code for fetching and extracting the user in a Try
block or we can wrap each query in a future.
When querying web APIs, it is sometimes the case that a request can take abnormally long. To prevent this from blocking the other threads...