iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
自我挑戰組

Notes from an android developer系列 第 4

#004 kotlin channelFlow

  • 分享至 

  • xImage
  •  
  • 這個 channelFlow 目前還沒用過, 專案裡也只有一個功能有在使用, 先紙上談兵研讀一下.

channelFlow

  • 在 kotlin coroutine 裡, channelFlow 是個 builder function, 用來建立一個稱做為 channel flow 類型的 flow. 提供一種方法來建構一個 flow, 在這個 flow 中,values 會使用 coroutines 從程式碼的不同部分同時產生。
  • 建立透過 SendChannel 傳送 values 的 clod flow.
  • channel 是作為產生 values 的程式碼與收集 values 的程式碼之間的 communication channel (像是生產者與消費者).
  • 可讓你定義一個 suspend lambda, 利用提供的 produceScope 來啟動 child coroutines 並傳送 values 到 channel.
特性
  • Value 的同步產生: 能夠從程式碼不同的部份產生 values 給 flow.
  • 結構化的方式: suspend lambda 提供結構化的方式管理 values 的產生以及取消.
  • 彈性: 可以在 suspend lambda 使用不同的 coroutine 功能, 如 launch, async 控制 values 的產生.
example
fun fetchDataFlow(): Flow<String> = channelFlow {
  val data1 = launch { 
    delay(1500) 
    send("data source A")
  }
  val data2 = async { 
    delay(1000)
    send("data source B")
  }
  
  data1.join()
  data2.await()  
}

fun main() {
  runBlocking {
    fetchDataFlow().collect { data ->
      println("Received : $data")
    }
  }
}
  • 先這樣, Happy moon festival.

上一篇
#003 kotlin flow more examples
下一篇
#005 kotlin channelFlow-2
系列文
Notes from an android developer5
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言