scope.launch(CoroutineName("UpdateNews")) { 
  updateNews(view) 
}
Full Snapshot

Code

package com.glassthought.sandbox
 
import gt.sandbox.util.output.Out
import kotlinx.coroutines.*
import kotlin.random.Random
 
// Simulating a View interface for displaying data
interface View {
  suspend fun showNews(news: List<String>)
  suspend fun showUser(user: String)
  suspend fun showProgressBar()
  suspend fun hideProgressBar()
}
 
val out = Out.standard()
 
// A simple implementation of the View interface
class ConsoleView : View {
  override suspend fun showNews(news: List<String>) {
    out.printlnGreen("News: $news")
  }
 
  override suspend fun showUser(user: String) {
    out.printlnGreen("User: $user")
  }
 
  override suspend fun showProgressBar() {
    out.printlnBlue("Loading...")
  }
 
  override suspend fun hideProgressBar() {
    out.printlnBlue("Done loading.")
  }
}
 
// Simulated functions to fetch data
suspend fun getNewsFromApi(): List<String> {
  out.println("Starting news fetch...")
  delay(1000L) // Simulating network delay
  out.println("News fetch complete.")
  return listOf("News 1", "News 2", "News 3")
}
 
suspend fun getUserData(): String {
  out.println("Starting user data fetch...")
  delay(800L) // Simulating network delay
  out.println("User data fetch complete.")
 
  return "John Doe"
}
 
 
// Suspending functions to update news and profile
suspend fun updateNews(view: View) {
  view.showProgressBar()
  val news = getNewsFromApi()
  val sortedNews = news.sortedByDescending { Random.nextInt(1, 100) } // Simulated sorting
  view.showNews(sortedNews)
  view.hideProgressBar()
}
 
suspend fun updateProfile(view: View) {
  val user = getUserData()
  view.showUser(user)
}
 
// Main function
fun main() = runBlocking {
  out.println("Starting the program...")
 
  val view = ConsoleView()
  val scope = CoroutineScope(Dispatchers.Default)
 
  scope.launch(CoroutineName("UpdateNews")) {
    updateNews(view)
  }
 
  scope.launch(CoroutineName("UpdateProfile")) {
    updateProfile(view)
  }
 
  // Keep the program alive long enough to see the output
  delay(2000L)
 
  out.println("Program finished.")
}

Command to reproduce:

gt.sandbox.checkout.commit a22a14e145f6445dd1dc \
&& cd "${GT_SANDBOX_REPO}" \
&& cmd.run.announce "./gradlew run --quiet"

Recorded output of command:

[elapsed:   31ms][tname:main/tid:1][coroutine:unnamed] Starting the program...
[elapsed:   53ms][tname:DefaultDispatcher-worker-1/tid:20][coroutine:UpdateNews] Loading...
[elapsed:   53ms][tname:DefaultDispatcher-worker-1/tid:20][coroutine:UpdateNews] Starting news fetch...
[elapsed:   54ms][tname:DefaultDispatcher-worker-2/tid:21][coroutine:UpdateProfile] Starting user data fetch...
[elapsed:  859ms][tname:DefaultDispatcher-worker-1/tid:20][coroutine:UpdateProfile] User data fetch complete.
[elapsed:  864ms][tname:DefaultDispatcher-worker-1/tid:20][coroutine:UpdateProfile] User: John Doe
[elapsed: 1057ms][tname:DefaultDispatcher-worker-1/tid:20][coroutine:UpdateNews] News fetch complete.
[elapsed: 1078ms][tname:DefaultDispatcher-worker-1/tid:20][coroutine:UpdateNews] News: [News 3, News 2, News 1]
[elapsed: 1078ms][tname:DefaultDispatcher-worker-1/tid:20][coroutine:UpdateNews] Done loading.
[elapsed: 2058ms][tname:main/tid:1][coroutine:unnamed] Program finished.