From b59deff562d334281cfb63427c5d98fa34424d1a Mon Sep 17 00:00:00 2001 From: Egito Filho Date: Fri, 6 Dec 2024 21:17:08 -0300 Subject: [PATCH] 03_05_GERENCIANDO_TAREFAS_ASSINCRONAS_COM_COROTINAS --- .gitignore | 32 ++++++++++++++ .idea/.gitignore | 8 ++++ .idea/inspectionProfiles/Project_Default.xml | 6 +++ .idea/kotlinc.xml | 10 +++++ .idea/libraries/KotlinJavaRuntime.xml | 17 ++++++++ .../jetbrains_kotlinx_coroutines_core.xml | 13 ++++++ .idea/misc.xml | 6 +++ .idea/modules.xml | 8 ++++ ConhecendoCoroutines.iml | 16 +++++++ src/Main.kt | 42 +++++++++++++++++++ 10 files changed, 158 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/kotlinc.xml create mode 100644 .idea/libraries/KotlinJavaRuntime.xml create mode 100644 .idea/libraries/jetbrains_kotlinx_coroutines_core.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 ConhecendoCoroutines.iml create mode 100644 src/Main.kt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3ddbf4c --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ +### IntelliJ IDEA ### +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Kotlin ### +.kotlin + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..df543e3 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..8226e53 --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/KotlinJavaRuntime.xml b/.idea/libraries/KotlinJavaRuntime.xml new file mode 100644 index 0000000..0c43400 --- /dev/null +++ b/.idea/libraries/KotlinJavaRuntime.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/jetbrains_kotlinx_coroutines_core.xml b/.idea/libraries/jetbrains_kotlinx_coroutines_core.xml new file mode 100644 index 0000000..6c77ee4 --- /dev/null +++ b/.idea/libraries/jetbrains_kotlinx_coroutines_core.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..e6be3f1 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..ec7314e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/ConhecendoCoroutines.iml b/ConhecendoCoroutines.iml new file mode 100644 index 0000000..7be2a5f --- /dev/null +++ b/ConhecendoCoroutines.iml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Main.kt b/src/Main.kt new file mode 100644 index 0000000..227d245 --- /dev/null +++ b/src/Main.kt @@ -0,0 +1,42 @@ +import kotlinx.coroutines.* +import java.text.SimpleDateFormat +import java.util.* + +// Objetivo: construção de uma casa, trabalhadores operando para contruir uma casa. Subir as paredes e instalar +// as portas, janelas e telhado. + +enum class BuildingMaterial(val description: String, val veliveringTimeInMillis: Long) { + DOORS("PORTAS", 500), + WINDOWS("JANELAS", 1_000), + ROOF("TELHADO", 3_000), +} + +fun getTimeNow(): String = + SimpleDateFormat("hh:mm:ss:SSS", Locale.getDefault()).format(Date()) + +suspend fun order(material: BuildingMaterial): BuildingMaterial { + println("${getTimeNow()} >>>>> SOLICITANDO ${material.description}...") + delay(material.veliveringTimeInMillis) + println("${getTimeNow()} >>>>> ${material.description} CHEGARAM!") + return material +} + +suspend fun doWork(task: String) { + println("${getTimeNow()} >>>>> EXECUTANDO TAREFA [$task]...") + delay(1_000) + println("${getTimeNow()} >>>>> TAREFA [$task] CONCLUÍDA!") +} + +fun main() { + runBlocking { + val doors = async { order(BuildingMaterial.DOORS) } + val roof = async { order(BuildingMaterial.ROOF) } + val windows = async { order(BuildingMaterial.WINDOWS) } + + doWork("CONSTRUIR PAREDES") + doWork("CONSTRUIR PAREDES") + launch { doWork("INSTALAR ${doors.await().description}") } + launch { doWork("INSTALAR ${roof.await().description}") }.cancel() + launch { doWork("INSTALAR ${windows.await().description}") } + } +} \ No newline at end of file