Section 16/201 menit
16. Task Naming
16. Task Naming
Teori: Debuggability sebagai First-Class Concern
Sebelum Swift 6.2, ketika terjadi crash atau hang di dalam Task, stack trace hanya menunjukkan alamat memori atau nama fungsi generik — sangat sulit di-debug:
swift
Thread 7 Queue: com.apple.root.default-qos (concurrent)
#0 0x... in Task.runOnCurrentThread()
#1 0x... in closure #1 in ViewController.viewDidLoad()
→ Tidak tahu Task ini untuk apa!
Swift 6.2 menambahkan Task naming — identifier human-readable yang muncul di debugger, Instruments, dan crash reports:
swift
// Swift 6.2: beri nama pada Task untuk debugging
Task(name: "Load User Profile") {
try await loadUserProfile()
}
Task(name: "Sync Background Data") {
await syncData()
}
// Di Instruments / debugger:
// Thread: "Load User Profile" — jauh lebih jelas!
Penggunaan Lanjutan
swift
// Nama dinamis berdasarkan context
func processOrders(_ orders: [Order]) async {
await withTaskGroup(of: Void.self) { group in
for order in orders {
group.addTask(name: "Process Order \(order.id)") {
await self.processOrder(order)
}
}
}
}
// Untuk monitoring dan logging
actor TaskMonitor {
var activeTasks: Set<String> = []
func trackTask(name: String, operation: @Sendable () async throws -> Void) async rethrows {
activeTasks.insert(name)
defer { activeTasks.remove(name) }
try await operation()
}
}
// Penggunaan:
let monitor = TaskMonitor()
Task(name: "Critical Payment Processing") {
await monitor.trackTask(name: "Payment") {
try await processPayment(order)
}
}
Kapan Menggunakan
Gunakan Task naming ketika:
- Task melakukan operasi yang distinctif dan perlu diidentifikasi
- Debugging concurrent code yang kompleks
- Profiling dengan Instruments
- Long-running background tasks yang perlu dimonitor
Tidak perlu ketika:
- Short-lived task yang trivial
- Task yang sudah jelas dari context-nya