示例一
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:返回结果');});
}
异步任务1
和x.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++){}
}