Bloc事件流是一个阻塞队列结论解析

 更新时间:2022年11月14日 15:24:05   作者:李小轰_Rex  
这篇文章主要为大家介绍了Bloc事件流是一个阻塞队列结论解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

在Flutter中有state的概念,我们使用Bloc进行状态管理,通过Bloc.addEvent的方式进行事件传递,状态变更。关于Bloc的基础用法,可以查阅Bloc官网相关资料,这里我们仅记录一下Bloc的队列等待。

新建一个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 {}

如上,定义了一个最基础的Bloc,事件A,事件B。我们接收到事件A后延时等待了2秒钟,用于验证Bloc的Event Loop是否具有阻塞性。

新建一个页面main.dart, 添加按钮事件,同时给bloc发送事件A和事件B:

//...省略非关键代码
onPressed: (){
          _bloc.add(TestEventA());
          _bloc.add(TestEventB());
    }

现象:

print("A") 打印后,等待了2秒,打印 "finish A await", 然后才响应到事件B的触发。

结论:

Bloc 的 event 队列是一个阻塞性队列,先进先出,只有当上一个事件消费完毕后,才会触发响应队列中的下一个事件。

解释开发中所遇到的问题现象

在 await 前面 addEvent,会阻塞线程,造成事件的接收延时,但在await前面 yeild 不受影响,可以在延时前收到状态变更

Stream队列是否也是有序的?

通过代码测试,流内消息体的顺序与加入的顺序无关,与消息体本身的耗时正相关。

以上就是Bloc事件流是一个阻塞队列结论解析的详细内容,更多关于Bloc 事件流阻塞队列的资料请关注脚本之家其它相关文章!

相关文章

  • java轻量级规则引擎easy-rules使用介绍

    java轻量级规则引擎easy-rules使用介绍

    这篇文章主要介绍了java轻量级规则引擎easy-rules使用介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • kafka springBoot配置的实现

    kafka springBoot配置的实现

    本文主要介绍了kafka springBoot配置的实现,通过详细解析Spring Boot for Apache Kafka的配置选项,以及如何优化Kafka生产者和消费者的属性设置,感兴趣的可以了解一下
    2023-11-11
  • java中set接口使用方法详解

    java中set接口使用方法详解

    这篇文章主要为大家详细介绍了java中set接口使用方法,介绍了Java中Set集合接口实现插入对象不重复的原理,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • java调用回调机制详解

    java调用回调机制详解

    这篇文章主要介绍了java调用回调机制详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java实现双端链表LinkedList

    Java实现双端链表LinkedList

    本文主要介绍了Java实现双端链表LinkedList,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • java局部变量表的基础知识点及实例

    java局部变量表的基础知识点及实例

    在本篇文章里小编给大家整理的是一篇关于java局部变量表的基础知识点及实例,有需要的朋友们可以学习参考下。
    2021-06-06
  • Java 实现LZ78压缩算法的示例代码

    Java 实现LZ78压缩算法的示例代码

    这篇文章主要介绍了Java 实现LZ78压缩算法的示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Java继承超详细教程

    Java继承超详细教程

    继承是面向对象语法的三大特征之一,继承可以降低代码编写的冗余度,提高编程的效率,通过继承,子类获得了父类的成员变量和方法,一个子类如何继承父类的字段和方法,如何修改从父类继承过来的子类的方法呢,今天我们开始学习有关Java继承的知识,感兴趣的朋友一起看看吧
    2023-11-11
  • Kotlin内存陷阱inline使用技巧示例详解

    Kotlin内存陷阱inline使用技巧示例详解

    这篇文章主要为大家介绍了Kotlin内存陷阱inline使用技巧示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Java基于分治算法实现的线性时间选择操作示例

    Java基于分治算法实现的线性时间选择操作示例

    这篇文章主要介绍了Java基于分治算法实现的线性时间选择操作,涉及java排序、比较、计算等相关操作技巧,需要的朋友可以参考下
    2017-11-11

最新评论