Section 6/171 menit
6. Global Actor Kustom: Membuat Isolation Domain Sendiri
6. Global Actor Kustom: Membuat Isolation Domain Sendiri
Kamu bisa membuat global actor sendiri untuk men-serialize akses ke shared resource lintas tipe.
Membuat Global Actor
swift
@globalActor
actor DatabaseActor {
static let shared = DatabaseActor()
}
@DatabaseActor
final class UserRepository {
func fetchAll() -> [User] { /* ... */ }
}
@DatabaseActor
final class OrderRepository {
func fetchAll() -> [Order] { /* ... */ }
}
Semua method di UserRepository dan OrderRepository sekarang dijalankan di executor DatabaseActor.shared — secara serial, lintas dua class. Cocok untuk: pool koneksi database, file I/O, hardware bus.
Custom Executor di Global Actor
swift
@globalActor
actor RenderActor {
static let shared = RenderActor()
let queue = DispatchSerialQueue(label: "render", qos: .userInteractive)
nonisolated var unownedExecutor: UnownedSerialExecutor {
queue.asUnownedSerialExecutor()
}
}
Sekarang semua kode @RenderActor jalan di queue priority tinggi.
Kapan Lebih Cocok dari Actor Instance
| Pertanyaan | Jawaban "Ya" → Global Actor |
|---|---|
| Apakah resource ini singleton secara semantik? | Ya |
| Apakah banyak class perlu berbagi domain ini? | Ya |
| Apakah lifetime resource = lifetime app? | Ya |
| Apakah kamu butuh per-instance state independen? | Tidak — gunakan actor instance |