Section 16/162 menit
16. Ringkasan & Decision Guide
16. Ringkasan & Decision Guide
| Skenario | Rekomendasi |
|---|---|
| Perlu kirim non-Sendable ke background task | Region-based isolation — pastikan tidak ada akses setelah transfer |
| Fungsi yang "menerima ownership" non-Sendable | Gunakan sending parameter |
| Resource butuh serial access, independen dari main thread | Custom global actor dengan @globalActor |
| Thread-safe tapi Swift tidak bisa buktikannya | nonisolated(unsafe) — dengan dokumentasi jelas mengapa aman |
| Migrasi bertahap dari codebase lama | @preconcurrency sebagai solusi sementara |
| Actor dengan operasi multi-step yang kompleks | State machine eksplisit — hindari mutable state di antara await |
| Concurrent identical requests | Deduplication via task tracking sebelum suspension point |
| Protocol dari library lama belum concurrent-safe | @preconcurrency conformance + @unchecked Sendable jika diperlukan |
| Closure tidak berperilaku seperti yang diharapkan | Audit: Task {} vs Task.detached {}, @Sendable vs non-Sendable |
| Isolation error yang membingungkan | Gunakan checklist debugging di Seksi 12 |
Mental Model untuk Swift Isolation
swift
Pertanyaan saat mendesain:
1. "Siapa yang memiliki data ini?" → Tentukan isolation domain
2. "Kapan data ini bisa diakses bersamaan?" → Identifikasi suspension points
3. "Data ini perlu berpindah domain?" → Gunakan Sendable atau region analysis
4. "Ada multiple step dengan await?" → Pikirkan re-entrancy, gunakan state machine
Penguasaan Swift Isolation bukan tentang menghafal aturan — melainkan tentang membangun intuisi tentang kapan data bisa diakses secara bersamaan. Setiap await adalah peluang untuk bertanya: "Apa yang bisa berubah saat code ini suspended?"
Langkah selanjutnya: swift-concurrency-complete.md untuk gambaran komprehensif semua API Swift Concurrency, dan swift6-synchronization.md untuk low-level primitif seperti Mutex dan Atomic yang melengkapi isolation model ini.