Conclusion
Congratulations, you’ve finished this course! Here’s a summary of everything you’ve learned. In the first part of this course, you learned about Grand Central Dispatch.
You learned the difference between running tasks on concurrent and serial queues.
And the difference between dispatching a task synchronously or asynchronously.
You learned about the system’s dispatch queues, with the different quality of service values.
You can now use dispatch work items, dispatch groups and dispatch semaphores.
And you learned how to wrap asynchronous functions so you can use them in dispatch groups.
In the second part of this course, you learned how to watch out for deadlocks and priority inversion, and how to make a class thread-safe.
The final part of this course was all about Operation and OperationQueue.
You can create block operations but, more often, you’ll subclass Operation to create reusable custom operations.
You know the states of an operation’s life cycle.
And you created an AsyncOperation class to manage these states for an asynchronous operation, so you can add it to an operation queue.
You can now use operation queues to manage dependencies between operations, and to cancel operations when the app doesn’t need them to complete.
Check out our other concurrency courses: Swift concurrency and Networking.