20.Dart异步编程:Isolates和事件循环
Last updated
void main() {
print('${DateTime.now()}: 1');
Isolate.spawn(isolateFunc, 15);
sleep(Duration(seconds: 3));
print('${DateTime.now()}: Sleep end');
}
void isolateFunc(int value) {
sleep(Duration(seconds: 1));
print('${DateTime.now()}: isolateFunc end $value');
}flutter: 2021-11-28 10:12:09.313570: 1
flutter: 2021-11-28 10:12:10.422793: isolateFunc end 15
flutter: 2021-11-28 10:12:12.349747: Sleep endint number = 1;
void main() {
print('${DateTime.now()}: 1');
Isolate.spawn(isolateFunc, 1);
Isolate.spawn(isolateFunc, 2);
Isolate.spawn(isolateFunc, 3);
Isolate.spawn(isolateFunc, 4);
Isolate.spawn(isolateFunc, 5);
Isolate.spawn(isolateFunc, 6);
Isolate.spawn(isolateFunc, 7);
Isolate.spawn(isolateFunc, 8);
Isolate.spawn(isolateFunc, 9);
Isolate.spawn(isolateFunc, 10);
sleep(Duration(seconds: 5));
print('${DateTime.now()}: Sleep end,number = $number');
}
void isolateFunc(int value) {
number += 1;
print('${DateTime.now()}: 第$value个调用, number = $number');
}flutter: 2021-11-28 10:24:18.275046: 1
flutter: 2021-11-28 10:24:18.506326: 第1个调用, number = 2
flutter: 2021-11-28 10:24:18.543709: 第3个调用, number = 2
flutter: 2021-11-28 10:24:18.572635: 第4个调用, number = 2
flutter: 2021-11-28 10:24:18.589551: 第5个调用, number = 2
flutter: 2021-11-28 10:24:18.613625: 第7个调用, number = 2
flutter: 2021-11-28 10:24:18.613557: 第8个调用, number = 2
flutter: 2021-11-28 10:24:18.618459: 第2个调用, number = 2
flutter: 2021-11-28 10:24:18.645893: 第6个调用, number = 2
flutter: 2021-11-28 10:24:18.669942: 第10个调用, number = 2
flutter: 2021-11-28 10:24:18.674398: 第9个调用, number = 2
flutter: 2021-11-28 10:24:23.296321: Sleep end,number = 1int number = 1;
void main() async {
print('${DateTime.now()}: 1');
// 创建端口
ReceivePort port = ReceivePort();
// Isolate
Isolate iso = await Isolate.spawn(isolateFunc, port.sendPort);
// 监听数据变化
port.listen((message) {
number = message;
print('${DateTime.now()}: 监听到 number = $number');
// 关闭端口
port.close();
// 销毁 Isolate
iso.kill();
});
}
void isolateFunc(SendPort send) {
sleep(Duration(seconds: 3));
send.send(15);
}flutter: 2021-11-28 10:38:59.982321: 1
flutter: 2021-11-28 10:39:03.114209: 监听到 number = 15int number = 0;
void main() async {
print('${DateTime.now()}: 1');
compute(comFunc, 1);
compute(comFunc, 2);
compute(comFunc, 3);
compute(comFunc, 4);
compute(comFunc, 5);
compute(comFunc, 6);
compute(comFunc, 7);
compute(comFunc, 8);
compute(comFunc, 9);
compute(comFunc, 10);
}
void comFunc(int value) {
number = value;
print('${DateTime.now()}: value = $value number = $number');
}flutter: 2021-11-28 10:54:03.331916: value = 6 number = 6
flutter: 2021-11-28 10:54:03.337162: value = 5 number = 5
flutter: 2021-11-28 10:54:03.382666: value = 4 number = 4
flutter: 2021-11-28 10:54:03.404757: value = 1 number = 1
flutter: 2021-11-28 10:54:03.406688: value = 7 number = 7
flutter: 2021-11-28 10:54:03.424210: value = 3 number = 3
flutter: 2021-11-28 10:54:03.433246: value = 8 number = 8
flutter: 2021-11-28 10:54:03.447492: value = 2 number = 2
flutter: 2021-11-28 10:54:03.494157: value = 9 number = 9
flutter: 2021-11-28 10:54:03.495839: value = 10 number = 10int number = 0;
void main() async {
number = await compute(comFunc, 1);
print(number);
}
int comFunc(int value) {
sleep(Duration(seconds: 2));
return number + value;
}flutter: 1