Use an `actor` to isolate shared mutable state. Actor-isolated methods and properties are accessed asynchronously with `await`, preventing data races. ```swift actor Counter { private var value = 0 func increment() { value += 1 } func currentValue() -> Int { value } nonisolated func description() -> String { "Thread-safe counter" } } let counter = Counter() Task { await counter.increment() let value = await counter.currentValue() print(value) } ``` Key practices: - Mark asynchronous functions...
Scanned 9/5/2026
Install to Claude Code
npx -y skills add HoangNguyen0403/agent-skills-standard --skill swift-concurrency --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Swift Concurrency?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hoangnguyen0403-swift-concurrency-26b9f9eb)More formats (shields.io, HTML) on the badges page.
Use an `actor` to isolate shared mutable state. Actor-isolated methods and properties are accessed asynchronously with `await`, preventing data races.
```swift
actor Counter {
private var value = 0
func increment() {
value += 1
}
func currentValue() -> Int {
value
}
nonisolated func description() -> String {
"Thread-safe counter"
}
}
let counter = Counter()
Task {
await counter.increment()
let value = await counter.currentValue()
print(value)
}
```
Key practices:
- Mark asynchronous functions `async` and call them with `await`.
- Use `nonisolated` only for methods that do not access actor state.
- Use `@MainActor` for UI classes and view models:
```swift
@MainActor
final class ViewModel {
var title = ""
}
```
Use `MainActor.run { ... }` for inline UI updates from asynchronous work:
```swift
let result = await fetchData()
await MainActor.run {
viewModel.title = result
}
```
Manage task lifetime with structured concurrency:
- Use `Task { ... }` to inherit isolation and cancellation context.
- Use `async let` for independent parallel work.
- Use `withTaskGroup` or `withThrowingTaskGroup` for dynamic task counts.
- Check cancellation in long loops with `Task.isCancelled` or propagate it with `try Task.checkCancellation()`.
- Avoid `Task.detached` unless you intentionally need to break context inheritance.
- Keep synchronous work out of `@MainActor` so the main thread is not blocked.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!