Я пытаюсь отследить, работает ли изолятор в настоящее время или нет (и в будущем будет ли он выведен из строя), используя isolate.addOnExitListener (...). Однако, следующий фрагмент кода не работает, как я бы ожидать:Каков наилучший способ отслеживания состояния изолята в дротике?
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";
}
});
});
«пункты» Карта содержит 3 значения, каждый с отличным названием: item1, item2, item3
Когда я запустить этот код, единственный выход, я получаю: «Item вышли: item3»
Я ожидал следующий вывод (не обязательно в порядке, так как изолят асинхронные): «Item вышли: item1» «Item вышли: item2 " «Item вышли: item3»
Вот код запущен в изолятов:
import 'dart:io';
main(List args) {
print('Hello world: standard out!');
stderr.writeln('Hello world: standard error!');
}
Похоже, замыкание теряется. Я здесь что-то не так? Есть ли лучший способ отслеживать состояние изоляции?
Заранее благодарен!
Вы должны рассмотреть, начиная изолят в приостановленном состоянии, поэтому у вас есть время, чтобы настроить onExitListener. –