Section 16/161 menit
16. Ringkasan & Decision Guide
16. Ringkasan & Decision Guide
Kapan Pakai Fitur Lanjutan
| Kebutuhan | Fitur |
|---|---|
| Pass context tanpa parameter di seluruh call chain | @TaskLocal |
| Logging/tracing yang otomatis tersebar | @TaskLocal |
| DI di tests tanpa ubah signature | @TaskLocal dengan .withValue() |
| Actor di event loop eksternal | Custom SerialExecutor |
| Bounded thread pool untuk task tree | TaskExecutor (Swift 6) |
| Cleanup resource saat task di-cancel | withTaskCancellationHandler |
| Streaming incremental data | Custom AsyncSequence |
| Pagination otomatis dengan prefetch | Custom AsyncIteratorProtocol |
| Isolasi resource khusus (DB, audio) | Custom @globalActor |
| Cross-process atau cross-machine actor | distributed actor |
| High-frequency callback bridge | UnsafeContinuation (hati-hati!) |
| Timeout yang bisa di-test | Generic Clock parameter |
Warning Signs yang Butuh Fitur Ini
swift
□ Semua fungsi di sebuah module punya parameter "requestID" atau "traceID" → TaskLocal
□ Actor method perlu akses resource yang hanya aman dari thread tertentu → Custom Executor
□ Cache/resource yang expensive di-initialize ulang karena actor reentrancy bug → Pelajari reentrancy
□ Pagination code manual dengan index dan bool flags → Custom AsyncSequence
□ Test yang butuh wait/sleep real untuk time-based logic → Generic Clock
□ Continuation yang di-resume tapi kadang tidak (memory leak) → withTaskCancellationHandler
Fitur-fitur ini bukan untuk dipakai di setiap project. Mulai dengan API standar — async/await, Task, actor, AsyncStream. Hanya reach ke advanced API ketika foundational tools tidak cukup dan ada kebutuhan yang nyata dan terukur. Advanced concurrency yang ditulis tanpa pemahaman mendalam seringkali lebih berbahaya dari code synchronous biasa.
Langkah berikutnya: praktekkan dengan menulis @TaskLocal untuk logging di project nyata terlebih dahulu — ini yang paling sering dibutuhkan. Setelah itu explore Custom Executor jika ada integrasi dengan framework eksternal.