私は Dart もプログラミングもまったく初めてです。アイソレートを使用して Dart でコマンドラインプログラムを開発しようとしています。私の意図は、そのパフォーマンスを同じプログラムと比較することですが、スレッドを使用して Java で記述されています。
これまでのところ、Dart プログラムは次のようになっています。
main.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}"); }
myIsolate.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 では分離でこれを行う方法を理解できません。
何か案は?