Isolate.addOnExitListener(...) を使用して、isolate が現在実行されているかどうか (および将来的にエラーが発生したかどうか) を追跡しようとしています。ただし、次のコード スニペットは期待どおりに機能しません。
items.forEach((name, item) async {
Isolate isolate = await Isolate.spawnUri(...);
item.status = "running";
ReceivePort receivePort = new ReceivePort();
isolate.addOnExitListener(receivePort.sendPort);
receivePort.listen((message){
if (message == null) {
print("Item exited: ${item.name}");
item.status = "stopped";
}
});
});
「items」マップには、item1、item2、item3 の 3 つの値が含まれており、それぞれに異なる名前が付いています。
このコードを実行すると、「Item exited: item3」という出力のみが表示されます。
次の出力が期待されていました (isolate は非同期であるため、必ずしも順序どおりではありません): "Item exited: item1" "Item exited: item2" "Item exited: item3"
分離株で実行されているコードは次のとおりです。
import 'dart:io';
main(List args) {
print('Hello world: standard out!');
stderr.writeln('Hello world: standard error!');
}
閉鎖が失われているようです。ここで何か間違ったことをしていますか?分離株の状態を追跡するより良い方法はありますか?
前もって感謝します!