Flutter:异步多线程结合

示例一

js 复制代码
main() => isoLoadguncmo();

void isoLoadguncmo() {
  Future(() {
    print('1来了');
    return compute(func, 123);
  }).then((value) => print('1结束'));
  Future(() {
    print('2来了');
    return compute(func, 123);
  }).then((value) => print('2结束'));
  Future(() {
    print('3来了');
    return compute(func, 123);
  }).then((value) => print('3结束'));
  Future(() {
    print('4来了');
    return compute(func, 123);
  }).then((value) => print('4结束'));
  Future(() {
    print('5来了');
    return compute(func, 123);
  }).then((value) => print('5结束'));
}

func(int message) {}

主线程中的异步Future,会按顺序执行1-5,

Future内的子线程compute则是无序的执行。

如果将return compute(func, 123);代码中的return去除,则会打印

因为

js 复制代码
Future(() {
  print('1来了');
  compute(func, 123);
})
和
.then((value) => print('1结束'));
可以看做是一个整体

示例二

js 复制代码
main(){
  Future x = Future((){
    print('异步任务1');
    scheduleMicrotask((){
      print('微任务1');
    });
  });
  x.then((value){
    print('异步任务1:返回结果');
  });
}


异步任务1x.then 是一个整体,所以先执行,后执行微任务1

示例三

js 复制代码
main(){
  Future x = Future((){
    print('异步任务1');
  });
  x.then((value){
    print('异步任务1:返回结果');
  });
  scheduleMicrotask((){
    print('微任务1');
  });
}

如果是同级的情况下,微任务>事件队列,微任务先执行,后执行事件队列中的异步

示例四,将耗时操作放入子线程compute,防止主线程卡UI

js 复制代码
return GestureDetector(
	 onTap: () {
	 	compute(func, 123);
	 },
)
func(){
	for(int i = 0;i<10000000;i++){}
}
相关推荐
RichardLai888 小时前
[Flutter学习之Dart基础] - 控制语句
android·flutter
louisgeek11 小时前
Flutter Channel 通信机制
flutter
浅忆无痕15 小时前
Flutter空安全最小必备知识
android·前端·flutter
亚洲小炫风19 小时前
flutter 打包mac程序 dmg教程
flutter·macos
亚洲小炫风1 天前
flutter 桌面应用之系统托盘
flutter·系统托盘
亚洲小炫风1 天前
flutter 桌面应用之右键菜单
flutter·桌面端·右键菜单·contextmenu
louisgeek1 天前
Flutter Widget、Element 和 RenderObject 的区别
flutter
顾林海1 天前
Flutter 文本组件深度剖析:从基础到高级应用
android·前端·flutter
RichardLai882 天前
[Flutter学习之Dart基础] - Dart方法基础
flutter
RichardLai882 天前
[Flutter学习之Dart基础] - Dart 变量类型及声明
flutter