Challenge - 5 Problems
Swift Concurrency Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
Output of async let with structured concurrency
What is the output of this Swift code using structured concurrency with
async let?Swift
func fetchNumber() async -> Int { return 10 } func fetchDouble() async -> Int { return 20 } func test() async { async let a = fetchNumber() async let b = fetchDouble() let sum = await a + await b print(sum) } Task { await test() }
Attempts:
2 left
💡 Hint
Remember that async let runs tasks concurrently and you must await their results.
✗ Incorrect
The async let bindings run fetchNumber() and fetchDouble() concurrently. Awaiting both and adding results gives 10 + 20 = 30.
🧠 Conceptual
intermediate1:30remaining
Understanding Task Groups in Swift concurrency
Which statement best describes the behavior of
TaskGroup in Swift's structured concurrency?Attempts:
2 left
💡 Hint
Think about how structured concurrency manages child tasks and their lifetimes.
✗ Incorrect
TaskGroup runs multiple child tasks concurrently and suspends the parent until all child tasks complete, ensuring structured concurrency.
🔧 Debug
advanced2:00remaining
Identify the runtime error in this structured concurrency code
What runtime error will this Swift code produce when executed?
Swift
func test() async { async let a = Task.sleep(nanoseconds: 1_000_000_000) // 1 second print("Before await") let _ = await a print("After await") } Task { await test() }
Attempts:
2 left
💡 Hint
Check how Task.sleep is used and awaited in async let.
✗ Incorrect
Task.sleep suspends the current task for the specified nanoseconds. async let runs it concurrently. Awaiting it after printing 'Before await' works fine.
❓ Predict Output
advanced2:30remaining
Output of nested TaskGroup with cancellation
What will be printed by this Swift code using nested TaskGroups and cancellation?
Swift
func test() async { await withTaskGroup(of: Void.self) { group in group.addTask { print("Task 1 start") try? await Task.sleep(nanoseconds: 500_000_000) print("Task 1 end") } group.addTask { print("Task 2 start") Task.current.cancel() try? await Task.sleep(nanoseconds: 1_000_000_000) print("Task 2 end") } } } Task { await test() }
Attempts:
2 left
💡 Hint
Consider how cancellation affects running tasks and which prints happen before cancellation.
✗ Incorrect
Task 2 cancels the current task but the sleep is cancellable. Task 2's sleep is skipped, so 'Task 2 end' is not printed. Task 1 runs normally.
🧠 Conceptual
expert1:30remaining
Effect of structured concurrency on resource cleanup
Which best describes how Swift's structured concurrency model helps with resource cleanup in asynchronous code?
Attempts:
2 left
💡 Hint
Think about how structured concurrency scopes child tasks to their parent.
✗ Incorrect
Structured concurrency scopes child tasks to their parent task. When the parent finishes or errors, child tasks are cancelled automatically, helping resource cleanup.