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:返回结果');
});
}
异步任务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++){}
}