In this chapter, we looked at the use of coroutines and reactive programming. Using these approaches, you can write simple and reliable code that works in multithreaded environments. You can easily combine both styles in one project.
You can significantly increase the performance of your application using multithreading, but it can lead to a new class of asynchronous and synchronous issues in your project. You should avoid shared, mutable variables that are used across multiple threads and not forget about synchronization.
In the next chapter, we'll learn about best practices from the examples in this book.