Actors
Actors are a reference type, similar to a class. However, actors protect their internal state by enforcing a single thread that is able to access them at any given time. This is achieved by making sure that each one of the actors’ methods and properties can only be accessed in a strictly sequential serial order. This determines data isolation, making it very hard to write code that could determine common concurrency problems, such as data races.
In structured concurrency, Actors should be used to perform synchronization. You should avoid locks, mutexes, and semaphores, as these are much more likely to introduce race conditions, and reasoning about their behavior is more difficult.
In Swift, actor isolation is enforced at the compile level, meaning that the compiler does not allow you to access the mutable state of the actor from outside the actor.
Swift actors are reentrant, meaning that while an actor awaits the result of an asynchronous operation, it can process...