The simplest concurrent programs are fairly isolated, even when they are dealing with concurrency. But in complex programs, you will need to pass data around across isolation boundaries, from one async task to another, from one actor to another. The data will need to be thread-safe. As we learned with Actors, sharing mutable data across asynchronous domains can result in data races and therefore data corruption.
Swift needed a way to define a safe way to share data across isolation boundaries. The Swift Evolution folks came up with a very elegant solution and introduced ...