Job dapat diinisialisasikan menggunakan fungsi launch() maupun Job() seperti berikut:
1. //menggunakan launch(): 2. fun main() = runBlocking { 3. val job = launch { 4. // Do background task here 5. } 6. } 7. 8. //menggunakan Job(): 9. fun main() = runBlocking { 10. val job = Job() 11. }
Setelah diinisialisasikan, job akan memiliki state New dan akan langsung dijalankan. Jika Anda ingin membuat sebuah job tanpa langsung menjalankannya, Anda bisa memanfaatkan CoroutineStart.LAZY seperti berikut:
1. fun main() = runBlocking { 2. val job = launch(start = CoroutineStart.LAZY) { 3. TODO("Not implemented yet!") 4. } 5. }
Dengan begitu job tersebut bisa dijalankan saat nanti dibutuhkan.
Setelah membuat sebuah job, kini kita bisa mulai menjalankan job tersebut. Caranya pun cukup sederhana, kita bisa menggunakan fungsi start() seperti berikut:
1. fun main() = runBlocking { 2. val job = launch(start = CoroutineStart.LAZY) { 3. delay(1000L) 4. println("Start new job!") 5. } 6. 7. job.start() 8. println("Other task") 9. }
Atau bisa juga dengan menggunakan fungsi join():
1. fun main() = runBlocking { 2. val job = launch(start = CoroutineStart.LAZY) { 3. delay(1000L) 4. println("Start new job!") 5. } 6. 7. job.join() 8. println("Other task") 9. }
Perbedaan dari keduanya adalah bahwa yang start() akan memulai job tanpa harus menunggu job tersebut selesai, sedangkan join() akan menunda eksekusi sampai job selesai. Jika kode pertama dijalankan, maka konsol akan menampilkan hasil berikut:
Other task
Start new job!
Sedangkan kode kedua akan menampilkan hasil:
Start new job!
Other task
Setelah dijalankan, job akan memiliki state Active.