Coroutines adalah cara Kotlin menulis kode asynchronous yang terlihat seperti kode synchronous. Section ini membongkar konsep, builder, dispatcher, dan Flow.
Pahami perbedaan synchronous dan asynchronous, mengapa async penting untuk respons UI dan throughput IO, serta pendekatan callbacks, futures, async/await, dan coroutines.
Buka → # Concurrency vs ParallelismBedakan concurrency (menangani banyak hal sekaligus secara logis) dan parallelism (menjalankan banyak hal sekaligus secara fisik), serta bagaimana coroutines mendukung keduanya.
Buka → # Coroutine FundamentalsPahami apa itu coroutine: komputasi yang dapat ditangguhkan, ringan, dan dijadwalkan secara kooperatif. Pelajari runBlocking, launch, dan await.
Buka → # suspend FunctionsPelajari suspend function: deklarasi, aturan pemanggilan dari coroutine, dan transformasi CPS (Continuation Passing Style) di level bytecode.
Buka → # Coroutine BuildersPelajari tiga coroutine builder utama — runBlocking, launch, dan async — beserta kapan memakai masing-masing untuk hasil yang benar dan idiomatik.
Buka → # Coroutine ScopePelajari CoroutineScope: wadah yang mengatur siklus hidup coroutine anak, builder coroutineScope, dan bagaimana scope otomatis membersihkan coroutine saat berakhir.
Buka → # Structured ConcurrencyPahami structured concurrency: hubungan induk-anak antar coroutine, propagasi exception, dan pembatalan berantai yang menjaga kode tetap aman dan terkontrol.
Buka → # Coroutine ContextPelajari CoroutineContext sebagai kumpulan elemen — Job, Dispatcher, CoroutineName, CoroutineExceptionHandler — yang dapat disusun dengan operator +.
Buka → # DispatchersPelajari Dispatchers.Default, IO, Main, dan Unconfined, kapan memakai masing-masing, serta cara mengganti dispatcher dengan withContext.
Buka → # Job dan CancellationPelajari interface Job, metode cancel(), join(), cancelAndJoin(), dan mekanisme pembatalan kooperatif berbasis suspend function dan ensureActive.
Buka → # Exception Handling in CoroutinesPelajari try-catch di dalam coroutine, CoroutineExceptionHandler untuk handler global, dan SupervisorJob untuk mengisolasi kegagalan antar anak.
Buka → # Coroutine TimeoutsPelajari withTimeout yang melempar TimeoutCancellationException, withTimeoutOrNull yang mengembalikan null, dan pola pembatalan otomatis untuk operasi yang tidak boleh menggantung.
Buka → # async dan awaitPelajari penggunaan async untuk komputasi paralel, pola awaitAll untuk koleksi, dan penanganan exception yang dilempar dari async coroutine.
Buka → # Coroutine ChannelsPelajari Channel<T> untuk komunikasi antar-coroutine, hot stream, send dan receive, buffered channel, dan builder produce.
Buka → # Shared FlowsPengenalan SharedFlow: hot multicast stream di mana banyak collector berbagi emisi yang sama, dengan konfigurasi replay buffer dan buffer overflow.
Buka → # StateFlowPelajari MutableStateFlow sebagai state holder: selalu punya nilai, semantik conflation (hanya nilai terbaru yang dikirim), dan perbandingan dengan SharedFlow.
Buka → # SharedFlowPelajari MutableSharedFlow sebagai event bus: tryEmit non-suspend vs emit suspend, konfigurasi replay, extraBufferCapacity, dan onBufferOverflow.
Buka → # Flow FundamentalsPelajari Flow<T> sebagai cold asynchronous stream: builder flow { emit(...) }, semantik lazy (mulai saat di-collect), dan eksekusi per collector.
Buka → # Flow OperatorsPelajari operator Flow: map, filter, transform, take, drop, combine, zip, flatMapConcat, flatMapMerge, flatMapLatest, debounce, dan distinctUntilChanged.
Buka → # Flow Context dan CancellationPelajari flowOn untuk pindah dispatcher, context preservation (collect tetap di pemanggil), dan perilaku Flow saat scope dibatalkan.
Buka → # Cold vs Hot FlowsPelajari perbedaan Flow (cold) dengan SharedFlow dan StateFlow (hot), kapan memakai masing-masing, dan implikasi desain dari pilihan tersebut.
Buka → # Flow TestingPelajari cara menguji Flow tanpa dependensi tambahan: toList() untuk menangkap emit, runBlocking untuk suspend, dan pola assertion pada List yang dihasilkan.
Buka → # Callback to CoroutinePelajari suspendCoroutine dan suspendCancellableCoroutine untuk membungkus API berbasis callback menjadi suspend function, lengkap dengan penanganan pembatalan.
Buka → # Coroutine TestingPelajari cara menguji coroutine dengan runBlocking, withTimeout, dan assertion standar. Verifikasi exception, pembatalan, dan structured concurrency tanpa dependensi tambahan.
Buka → # Coroutine Best PracticesPelajari aturan praktis menulis coroutine: structured concurrency, withContext untuk ganti dispatcher, Flow untuk stream, kode cancellation-aware, dan konkurensi aman.
Buka →