最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Bloc事件流是一個阻塞隊(duì)列結(jié)論解析

 更新時間:2022年11月14日 15:24:05   作者:李小轟_Rex  
這篇文章主要為大家介紹了Bloc事件流是一個阻塞隊(duì)列結(jié)論解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

在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)文章

最新評論

明星| 通榆县| 葵青区| 古丈县| 图木舒克市| 镇康县| 和平区| 阿克陶县| 威海市| 潞西市| 贵南县| 礼泉县| 潼南县| 望谟县| 枞阳县| 安溪县| 浦县| 漯河市| 汝阳县| 肇源县| 墨脱县| 江口县| 邢台市| 肇东市| 萍乡市| 简阳市| 沂源县| 鹰潭市| 昆明市| 宁陵县| 唐山市| 茌平县| 霍林郭勒市| 湘乡市| 泰和县| 巫山县| 盐亭县| 兰考县| 漳浦县| 咸宁市| 鹤庆县|