kotlinx.coroutines 1.4.0: Présentation de StateFlow et SharedFlow

En prévision du début du cours « Kotlin Backend Developer» , nous invitons tout le monde à s'inscrire à un cours ouvert sur le thème «Kotlin multiplateforme: recto / verso en une seule langue» .







Et maintenant, nous vous proposons la traduction traditionnelle de l'article à lire.










Aujourd'hui, nous sommes heureux d'annoncer la sortie de la version  1.4.0 de  la bibliothèque Kotlin Coroutines. Les principales innovations de cette version sont StateFlow  et  SharedFlow , qui sont désormais des API stables. StateFlow et SharedFlow sont destinés à être utilisés dans des situations où la gestion de l'état est requise dans le contexte d'une exécution asynchrone à l'aide de Kotlin Coroutines.





API- Flow Kotlin , . , Flow — . Kotlin  Flow  ,  Sequences: , , . .  Sequences  Flow  Kotlin ,  Flow  .





 Flow : , API- Flow.  Flow  backpressure,  — .





val flow: Flow<Int> = flow {
	delay(100)
	for(i in 1..10) {
		emit(i)
	}
}.map {
	delay(100)
	it * it
}
      
      



Flow , Sequences. Flow , backpressure.





Flow API-, , . , . : , «» «», «» «». : .





API- Flow , .  ConflatedBroadcastChannel. ConflatedBroadcastChannel . , , . , . , - !





ConflatedBroadcastChannel API- — StateFlow  SharedFlow!





StateFlow

StateFlow : StateFlow  MutableStateFlow:





public interface StateFlow<out T> : SharedFlow<T> {
   public val value: T
}

public interface MutableStateFlow<out T>: StateFlow<T>, MutableSharedFlow<T> {
   public override var value: T
   public fun compareAndSet(expect: T, update: T): Boolean
}
      
      



. .





, API-.





class DownloadingModel {

   private val _state.value = MutableStateFlow<DownloadStatus>(DownloadStatus.NOT_REQUESTED)
   val state: StateFlow<DownloadStatus> get() = _state

   suspend fun download() {
       _state.value = DownloadStatus.INITIALIZED
       initializeConnection()
       processAvailableContent {
               partialData: ByteArray,
               downloadedBytes: Long,
               totalBytes: Long
           ->
           storePartialData(partialData)
           _state = DownloadProgress(downloadedBytes.toDouble() / totalBytes)
       }
       _state.value = DownloadStatus.SUCCESS
   }
}
      
      



 state,  (state) . : state.value = DownloadStatus.INITIALIZED



. , , . , state



  , .





, API . , - . , , state



Flow.





SharedFlow

, , ? API-  SharedFlow. API- , .





public interface SharedFlow<out T> : Flow<T> {
   public val replayCache: List<T>
}
      
      



 — , , . , .





SharedFlow  MutableSharedFlow.





interface MutableSharedFlow<T> : SharedFlow<T>, FlowCollector<T> {
   suspend fun emit(value: T)
   fun tryEmit(value: T): Boolean
   val subscriptionCount: StateFlow<Int>
   fun resetReplayCache()
}
      
      



MutableSharedFlow . , MutableSharedFlow . , .





MutableSharedFlow . SharedFlow.





public fun <T> MutableSharedFlow(
   replay: Int,
   extraBufferCapacity: Int = 0,
   onBufferOverflow: BufferOverflow = BufferOverflow.SUSPEND
): MutableSharedFlow<T>
      
      



MutableSharedFlow , , , , , . , , .





,  Flow.shareIn



.





public fun <T> Flow<T>.shareIn(
   scope: CoroutineScope,
   replay: Int,
   started: SharingStarted = SharingStarted.Eagerly
)
      
      



API- StateFlow SharedFlow Kotlin . , .





API, !





Kotlin Coroutines , Kotlin 1.4 Online Event.






"Kotlin Backend Developer".



"Kotlin multiplatform: front/back ".












All Articles