Bloc事件流是一個阻塞隊(duì)列結(jié)論解析
前言
在Flutter中有state的概念,我們使用Bloc進(jìn)行狀態(tài)管理,通過Bloc.addEvent的方式進(jìn)行事件傳遞,狀態(tài)變更。關(guān)于Bloc的基礎(chǔ)用法,可以查閱Bloc官網(wǎng)相關(guān)資料,這里我們僅記錄一下Bloc的隊(duì)列等待。
新建一個Bloc類
class TestBloc extends Bloc<TestEvent, TestState> {
TestBloc() : super(new TestState());
@override
Stream<TestState> mapEventToState(TestEvent event) async* {
if (event is TestEventA) {
print("A");
await Future.delayed(Duration(seconds: 2));
print("finish A await");
} else if (event is TestEventB) {
print("B");
}
}
}
abstract class TestEvent {}
class TestEventA extends TestEvent {}
class TestEventB extends TestEvent {}
class TestState {}
如上,定義了一個最基礎(chǔ)的Bloc,事件A,事件B。我們接收到事件A后延時等待了2秒鐘,用于驗(yàn)證Bloc的Event Loop是否具有阻塞性。
新建一個頁面main.dart, 添加按鈕事件,同時給bloc發(fā)送事件A和事件B:
//...省略非關(guān)鍵代碼
onPressed: (){
_bloc.add(TestEventA());
_bloc.add(TestEventB());
}
現(xiàn)象:
print("A") 打印后,等待了2秒,打印 "finish A await", 然后才響應(yīng)到事件B的觸發(fā)。
結(jié)論:
Bloc 的 event 隊(duì)列是一個阻塞性隊(duì)列,先進(jìn)先出,只有當(dāng)上一個事件消費(fèi)完畢后,才會觸發(fā)響應(yīng)隊(duì)列中的下一個事件。
解釋開發(fā)中所遇到的問題現(xiàn)象
在 await 前面 addEvent,會阻塞線程,造成事件的接收延時,但在await前面 yeild 不受影響,可以在延時前收到狀態(tài)變更
Stream隊(duì)列是否也是有序的?
通過代碼測試,流內(nèi)消息體的順序與加入的順序無關(guān),與消息體本身的耗時正相關(guān)。
以上就是Bloc事件流是一個阻塞隊(duì)列結(jié)論解析的詳細(xì)內(nèi)容,更多關(guān)于Bloc 事件流阻塞隊(duì)列的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
collection集合體系與并發(fā)修改異常的解決方法
今天小編就為大家分享一篇關(guān)于collection集合體系與并發(fā)修改異常的解決方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
Java?深入理解創(chuàng)建型設(shè)計模式之原型模式
原型(Prototype)模式的定義如下:用一個已經(jīng)創(chuàng)建的實(shí)例作為原型,通過復(fù)制該原型對象來創(chuàng)建一個和原型相同或相似的新對象。在這里,原型實(shí)例指定了要創(chuàng)建的對象的種類。用這種方式創(chuàng)建對象非常高效,根本無須知道對象創(chuàng)建的細(xì)節(jié)2022-02-02
IDEA 顯示Run Dashboard窗口的2種方式(推薦)
這篇文章主要介紹了IDEA 顯示Run Dashboard窗口的2種方式,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
Java集合類的組織結(jié)構(gòu)和繼承、實(shí)現(xiàn)關(guān)系詳解
這篇文章主要介紹了Java集合類的組織結(jié)構(gòu)和繼承、實(shí)現(xiàn)關(guān)系,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
spring data簡化jpa開發(fā)_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了spring data簡化jpa開發(fā),本文主要講述 Spring Data JPA,希望能夠深入學(xué)習(xí) Spring 和 JPA,有興趣的可以了解下2017-09-09
SpringBoot整合Redis實(shí)現(xiàn)常用功能超詳細(xì)過程
這篇文章主要介紹了SpringBoot整合Redis實(shí)現(xiàn)常用功能,登陸功能是每個項(xiàng)目必備的功能吧,但是想設(shè)計好,卻是很難,下面介紹兩種登陸功能的解決方式,需要的朋友可以參考下2022-08-08
Java源碼解析ArrayList及ConcurrentModificationException
今天小編就為大家分享一篇關(guān)于Java源碼解析ArrayList及ConcurrentModificationException,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01
Java流程控制之循環(huán)結(jié)構(gòu)for,增強(qiáng)for循環(huán)
這篇文章主要介紹了Java流程控制之循環(huán)結(jié)構(gòu)for,增強(qiáng)for循環(huán),for循環(huán)是編程語言中一種循環(huán)語句,而循環(huán)語句由循環(huán)體及循環(huán)的判定條件兩部分組成,其表達(dá)式為:for(單次表達(dá)式;條件表達(dá)式;末尾循環(huán)體){中間循環(huán)體;},下面我們倆看看文章內(nèi)容的詳細(xì)介紹2021-12-12
springboot 實(shí)現(xiàn)記錄業(yè)務(wù)日志和異常業(yè)務(wù)日志的操作
這篇文章主要介紹了springboot 實(shí)現(xiàn)記錄業(yè)務(wù)日志和異常業(yè)務(wù)日志的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07

