A-short-name / Public-Transportation-Manager

Web Applications II project
0 stars 0 forks source link

Make buyTicket Async and concurrent #17

Closed MattiaRiola closed 2 years ago

MattiaRiola commented 2 years ago

Il servizio buy ticket può fare le richieste in modo concorrente e parallelo chiamando le suspend function in modo async

val res1 = async{
   repo.getUserInfo()
}
val res2 = async{
  repo.getTicketInfo()
}
res1.await()
res2.await() 
println("finito")

finito viene stampato prima rispetto che chiamare le suspend fun delle repo senza wrapparle con async perché le due richieste usando le async vengono fatte in parallelo.

MattiaRiola commented 2 years ago

Transform the code into a jobs that can be cancel

https://kotlinlang.org/docs/cancellation-and-timeouts.html#cancelling-coroutine-execution

GrayNeel commented 2 years ago

Esempio di codice per usare async in una coroutine:

    suspend fun getTransactions() : Flow<Transaction> = coroutineScope {
        val res = async {
            println("2")
            2
        }
        res.await()
        val sub = principal.awaitSingle().sub
        paymentService.getTransactionsByUser(sub)
    }