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实现银行家算法

    使用java实现银行家算法

    这篇文章主要为大家详细介绍了如何使用java实现银行家算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • collection集合体系与并发修改异常的解决方法

    collection集合体系与并发修改异常的解决方法

    今天小编就为大家分享一篇关于collection集合体系与并发修改异常的解决方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Java 深入理解创建型设计模式之原型模式

    Java 深入理解创建型设计模式之原型模式

    原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节
    2022-02-02
  • IDEA 显示Run Dashboard窗口的2种方式(推荐)

    IDEA 显示Run Dashboard窗口的2种方式(推荐)

    这篇文章主要介绍了IDEA 显示Run Dashboard窗口的2种方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java集合类的组织结构和继承、实现关系详解

    Java集合类的组织结构和继承、实现关系详解

    这篇文章主要介绍了Java集合类的组织结构和继承、实现关系,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • spring data简化jpa开发_动力节点Java学院整理

    spring data简化jpa开发_动力节点Java学院整理

    这篇文章主要介绍了spring data简化jpa开发,本文主要讲述 Spring Data JPA,希望能够深入学习 Spring 和 JPA,有兴趣的可以了解下
    2017-09-09
  • SpringBoot整合Redis实现常用功能超详细过程

    SpringBoot整合Redis实现常用功能超详细过程

    这篇文章主要介绍了SpringBoot整合Redis实现常用功能,登陆功能是每个项目必备的功能吧,但是想设计好,却是很难,下面介绍两种登陆功能的解决方式,需要的朋友可以参考下
    2022-08-08
  • Java源码解析ArrayList及ConcurrentModificationException

    Java源码解析ArrayList及ConcurrentModificationException

    今天小编就为大家分享一篇关于Java源码解析ArrayList及ConcurrentModificationException,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Java流程控制之循环结构for,增强for循环

    Java流程控制之循环结构for,增强for循环

    这篇文章主要介绍了Java流程控制之循环结构for,增强for循环,for循环是编程语言中一种循环语句,而循环语句由循环体及循环的判定条件两部分组成,其表达式为:for(单次表达式;条件表达式;末尾循环体){中间循环体;},下面我们俩看看文章内容的详细介绍
    2021-12-12
  • springboot 实现记录业务日志和异常业务日志的操作

    springboot 实现记录业务日志和异常业务日志的操作

    这篇文章主要介绍了springboot 实现记录业务日志和异常业务日志的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07

最新评论