Kotlin Android | Coroutines(Part 1)

Kotlin Android | Coroutines(Part 1)

Step 1:
Open build.gradle(:app) and add following dependency and rebuild the project.
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
#1 Launch{}:
fun funLaunch() {
CoroutineScope(Dispatchers.Main).launch {
val result = doRequest("TagLaunch")
Log.d("TagLaunch", "" + result)
}
Log.d("TagLaunch", "Request End")
}

suspend fun doRequest(tagString: String): String {
Log.d(tagString, "Request Created")
delay(500)
return "Request Completed"
}
Output :
D/TagLaunch: Request End
D/TagLaunch: Request Created
D/TagLaunch: Request Completed
#2 Start():
private fun funJobStart() {
val job = CoroutineScope(Dispatchers.Main).launch(start = CoroutineStart.LAZY) {
val result = doRequest("TagJobStart")
Log.d("TagJobStart", "" + result)
}
job.start()
Log.d("TagJobStart", "Request End")
}

suspend fun doRequest(tagString: String): String {
Log.d(tagString, "Request Created")
delay(500)
return "Request Completed"
}
Output :
D/TagJobStart: Request End
D/TagJobStart: Request Created
D/TagJobStart: Request Completed
#3 RunBloking{}:
private fun funrunBlocking() = runBlocking {

launch {
val result = doRequest("TagrunBlocking")
Log.d("TagrunBlocking", "" + result)
}

Log.d("TagrunBlocking", "Request End")
}
suspend fun doRequest(tagString: String): String {
Log.d(tagString, "Request Created")
delay(500)
return "Request Completed"
}
Output :
D/TagrunBlocking: Request End
D/TagrunBlocking: Request Created
D/TagrunBlocking: Request Completed
#4 Join():
private fun funJoin() = runBlocking {
val job = launch {
val result = doRequest("TagJoin")
Log.d("TagJoin", "" + result)
}
job.join()
Log.d("TagJoin", "Request End")
}
suspend fun doRequest(tagString: String): String {
Log.d(tagString, "Request Created")
delay(500)
return "Request Completed"
}
Output :
D/TagJoin: Request Created
D/TagJoin: Request Completed
D/TagJoin: Request End
#5 Async{} Await():
private fun fun_Async_Await() = runBlocking {
val resultList = mutableListOf<String>()
val job1 = async {
return@async doRequest1(1)
}
val job2 = async {
return@async doRequest1(2)
}
resultList.add(job1.await())
resultList.add(job2.await())
Log.d("TagAsyncAwait", "Result id $resultList")
Log.d("TagAsyncAwait", "Request End")
}

suspend fun doRequest1(number: Int): String {
Log.d("Tag", "Request Created $number")
delay(500)
return "Request Completed $number"
}
Output :
D/Tag: Request Created 1
D/Tag: Request Created 2
D/TagAsyncAwait: Result id [Request Completed 1, Request Completed 2]
D/TagAsyncAwait: Request End

Comments