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