# SKB – Scala Future

## Introduction

Periodically, I will publish new exercises so you can slowly build up knowledge about Scala.

It is designed to be done in a very short amount of time and learn a little bit each day, just to create a routine.

This episode will teach you about Scala `Future`.

Hope you are going to enjoy it! It is designed for anyone to learn Scala from scratch and slowly learn, one Bit at a time.

After this Bit, I would love to hear your feedback in the comments down below.

Feel free to join the Discord server as well if you would like some help and support from the rest of our community.

## What are we learning today?

Today we are going to learn about Scala `Future` !

Finally diving into asynchronous standard library !

Talking about `Future`, the good and the bad.

Time to try on the exercise on your own and scroll down for more information when you are done or if you are stuck.

## Exercise

Here is an exercise to complete today.

If I did my job well, you should be able to guess by yourself the solution based on what you previously learned and based on the clues.

The goal of the exercise is to replace the `???` by a piece of code so that the exercise compiles and that’s how you win! Good luck!

You can fill the exercise right in here:

Or, if it does not load, go on to Scastie (JkqgIleTS6Sb5Ies2jAKvw).

## More information about Scala `Future`

In this exercise you will learn (or have learned, if you have already solved the puzzle) about Scala `Future`.

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.

Feel free to go back to the exercise, modify the code to try out new things and get a better intuition for Scala `Future`.

## Conclusion

I hope you have learned something new or had fun during this Scala Knowledge Bit.