Scala Future

Finally diving into asynchronous standard library !

Talking about Future, the good and the bad.

Lots going on here but hopefully the comments helped breaking it down into bits size knowledge.

First of all, to use Future, you have to define an ExecutionContext. There are plenty of ways to do it but to stay simple, we are going to be using the default global one.

Then, let's start with the first part. In this part, we are discovering Future. Simply create then using Future {...} and you can have any code in there. The return type will be Future[A], where A is the return type of what is inside the {...}.

You can chain futures together using for-comprehension, like we saw in previous episode. As well as the traditional map, flatMap, etc…

We are already encountering one danger to know about Future: they start as soon as they are created. Also, the next operation is executed when the first one return, this is why the futures f3 to f5 are waiting on each other to start. To start them at the same time, you would have to create them outside of the for-comprehension like f1 and f2.

The second part is to illustrate the biggest danger about Future. They are NOT cancellable !

As you can see, even when the Await time is smaller and would throw an exception, the Future keep running in the background. Which can be dangerous if you are doing some insert in a database for instance and believe that it was cancel, it will not be.

Other framework more advanced like ZIO offer better asynchronous features using Fibers instead of Threads. But this will have to wait for us to be master in functional programming and more advanced concepts before exploring this library.

Reveal more information and clues
Load Exercise