我对 Dart 和编程都很陌生。我正在尝试使用隔离在 Dart 中开发一个命令行程序。我的目的是将它的性能与同一个程序进行比较,但它是用 Java 编写的,带有线程。
到目前为止,Dart 程序看起来像这样:
主要.dart
import "dart:async"; import "dart:isolate"; main() { var rPort1 = new ReceivePort(); var rPort2 = new ReceivePort(); var p1 = 0; rPort1.listen((partial) { print("p1 ${partial}"); p1 = partial; rPort1.close(); }); var p2 = 0; rPort2.listen((partial) { print("p2 ${partial}"); p2 = partial; rPort2.close(); }); Isolate.spawnUri(new Uri.file("MyIsolate.dart"), [arg0, ...], rPort1.sendPort); Isolate.spawnUri(new Uri.file("MyIsolate.dart"), [arg0, ...], rPort2.sendPort); var p3 = p1 + p2; print("p3 ${p3}"); }
我的隔离.dart
import "dart:async"; import "dart:isolate"; main(args, SendPort port) { var partial = 0; // ... do stuff ... // args are used and partial is updated port.send(partial); }
输出如下所示:
p3 0
p1 -0.1168096561671553
p2 0.023709338284264223
如您所见,每个隔离的返回值是在主隔离完成执行之后出现的。我想要的是主要使用隔离的结果来进一步计算。
我不知道我错过了什么。我敢肯定这是非常愚蠢的事情,但我无法在这个问题上继续前进。在 Java 中获取每个线程的结果值很简单,但在 Dart 中我不知道如何在隔离中做到这一点。
有任何想法吗?