自学内容网 自学内容网

Flutter:异步多线程结合

示例一

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去除,则会打印
在这里插入图片描述
因为

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

示例二

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

在这里插入图片描述
异步任务1x.then 是一个整体,所以先执行,后执行微任务1

示例三

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

如果是同级的情况下,微任务>事件队列,微任务先执行,后执行事件队列中的异步
在这里插入图片描述

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

return GestureDetector(
 onTap: () {
 compute(func, 123);
 },
)
func(){
for(int i = 0;i<10000000;i++){}
}

原文地址:https://blog.csdn.net/qq_40745143/article/details/143734029

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!