当前位置: 首页 > news >正文

良匠网站建设百度平台客服

良匠网站建设,百度平台客服,网站平台搭建技术,高德街景地图全景下载Stream Stream用于接收异步事件Stream 可以接收多个异步事件Stream.listen()方法返回StreamSubscription 可用于取消事件订阅,取消后,不再接收事件 基本使用 Stream.fromFutures([Future.delayed(Duration(seconds: 1),(){return "事件1";})…

Stream

  • Stream用于接收异步事件
  • Stream 可以接收多个异步事件
  • Stream.listen()方法返回StreamSubscription 可用于取消事件订阅,取消后,不再接收事件

基本使用

 Stream.fromFutures([Future.delayed(Duration(seconds: 1),(){return "事件1";}),Future.delayed(Duration(seconds: 3),(){return "事件2";}),Future.delayed(Duration(seconds: 5),(){return "事件3";})]).listen((event) {print("${DateTime.now().millisecondsSinceEpoch} >> "+event);}).onDone(() {print("${DateTime.now().millisecondsSinceEpoch} >> onDone");});Stream.fromFutures([Future.delayed(Duration(seconds: 1),(){return "事件1";}),Future.delayed(Duration(seconds: 3),(){return "事件2";}),Future.delayed(Duration(seconds: 5),(){return "事件3";})]).listen((event) {print("${DateTime.now().millisecondsSinceEpoch} >> "+event);},onError: (error){},onDone: (){});

运行结果

1703817812594 >> 事件1
1703817814583 >> 事件2   //2s后打印
1703817816574 >> 事件3   //2s后打印
1703817816578 >> onDone

另外一种使用方式 更加灵活

var streamController =  StreamController();streamController.stream.listen((event) {print(event);});streamController.add("事件1");streamController.add("事件2");streamController.add("事件3");

运行结果

事件1
事件2
事件3

由结果可以看出,Stream类似于rxjava
Stream.listen()方法返回StreamSubscription 可用于取消事件订阅,取消后,不再接收事件
未取消订阅

 StreamController streamController =  StreamController();StreamSubscription streamSubscription = streamController.stream.listen((event) {print(event);});streamController.add("事件1");streamController.add("事件2");Future((){sleep(Duration(seconds: 2));// streamSubscription.cancel();streamController.add("事件3");});

结果

事件1
事件2
事件3

取消订阅后

 StreamController streamController =  StreamController();StreamSubscription streamSubscription = streamController.stream.listen((event) {print(event);});streamController.add("事件1");streamController.add("事件2");Future((){sleep(Duration(seconds: 2));streamSubscription.cancel();streamController.add("事件3");});

结果

事件1
事件2
StreamController

构造函数参数表示stream的生命周期

/**
onListen: 监听开始开始
onPause:监听暂停
onResume:监听重启
onCancel:监听取消
sync :同步 or 异步
*/factory StreamController({void onListen()?,void onPause()?,void onResume()?,FutureOr<void> onCancel()?,bool sync = false}) {return sync? _SyncStreamController<T>(onListen, onPause, onResume, onCancel): _AsyncStreamController<T>(onListen, onPause, onResume, onCancel);}
StreamController streamController =  StreamController(onListen: (){print("onListen");},onPause: (){print("onPause");},onResume: (){print("onResume");},onCancel: (){print("onCancel");},);StreamSubscription streamSubscription = streamController.stream.listen((event) {print(event);});streamController.add("事件1");streamSubscription.pause();streamSubscription.resume();streamController.add("事件2");Future((){sleep(Duration(seconds: 2));streamSubscription.cancel();streamController.add("事件3");});

运行结果:

onListen
onPause
事件1
事件2
onResume
onCancel

Stream其他构造方法

void main() async{Stream.value(1).listen((event) {print(event);});Stream.fromIterable([2,3,4,5]).listen((event) {print(event);});//结合await使用Stream stream = Stream.fromIterable([6,7,8,9]);await for(var i in stream){print(i);}
}

运行结果:

1
2
6
3
7
4
8
5
9

Stream.periodic 每隔多长时间执行一次任务

 Stream.periodic(Duration(seconds: 2),(computationCount){return "它死啦,它火啦,它死啦才火啦!${computationCount}";}).take(5)  //执行5次 不设置一直执行.listen((event) {print(event);});

运行结果

它死啦,它火啦,它死啦才火啦!0
它死啦,它火啦,它死啦才火啦!1
它死啦,它火啦,它死啦才火啦!2
它死啦,它火啦,它死啦才火啦!3
它死啦,它火啦,它死啦才火啦!4

async* 标记的方法称为异步生成器,yield生成单个元素,yield*生成多个元素,最终汇集成流

void main(){createStream().listen((event) {print("${DateTime.now().millisecondsSinceEpoch} >> ${event}");});
}Stream<int> createStream() async*{for(int i=0;i<10;i++){sleep(Duration(seconds: 1));  //1s钟生成一个yield i;}
}

//结果

1703821955894 >> 0
1703821956912 >> 1
1703821957921 >> 2
1703821958929 >> 3
1703821959940 >> 4
1703821960953 >> 5
1703821961960 >> 6
1703821962971 >> 7
1703821963982 >> 8
1703821964993 >> 9
http://www.hkea.cn/news/510728/

相关文章:

  • 网站可以免费看企业网站系统
  • 中华人民共和国建设部网站seo怎么快速提高排名
  • 南宁做网站的有几家东莞网络营销网站建设
  • 苏州知名网站建设开发新区seo整站优化公司
  • 政府建设网站计划书品牌营销策略包括哪些内容
  • 深圳市做网站百度seo排名点击器app
  • 五莲网站建设维护推广网络营销推广及优化方案
  • 重庆网红整站多关键词优化
  • 动易网站cms一级消防工程师考试
  • wordpress更新报错想找搜索引擎优化
  • 提供网站建设费用资源网
  • wordpress怎么使用主题seo优化评论
  • 柳州做网站如何建网站详细步骤
  • 黄岛做网站哪家好四川seo关键词工具
  • dede门户网站模版写软文推广
  • 网站开发者排名开发一个app平台大概需要多少钱?
  • 做网站 博客百度推广助手客户端
  • 温州市手机网站制作哪家好爱站网长尾词挖掘
  • 党委网站建设要求凡科建站靠谱吗
  • wordpress 安卓客户端福建seo优化
  • 襄阳seo技术长沙seo网站优化
  • 做一的同志小说网站做seo要投入什么
  • 网站的文件结构百度搜索排名怎么收费
  • 全景网站app网络营销工具分析
  • 南京建设工程交易中心网站seo是什么的简称
  • 利用vps做网站关键字排名查询
  • 常熟网站制作找哪家好品牌型网站制作价格
  • 怎么做自己网站推广网络广告
  • 化州网站建设促销方法100种
  • 长沙专业网站设计平台新闻最新消息10条