Сообщение между изолятами в Dart
После запуска основной изолят получает порт второго и отправляет в него копию строки. Общей переменной между изолятами нет:
Дочерняя функция может слушать порт основного изолята и реагировать на каждое сообщение:
import 'dart:isolate';
void main() async {
var receive = ReceivePort();
await Isolate.spawn(echo, receive.sendPort);
var workerSend = await receive.first as SendPort;
workerSend.send("note");
receive.close();
}
void echo(SendPort mainSend) {
var inbox = ReceivePort();
mainSend.send(inbox.sendPort);
inbox.listen((message) {
print(message);
});
}
Сначала основной ждет SendPort рабочего
канала, затем шлет строку уже на него. Переданный
текст приходит копией - изменение в одном изоляте
не затронет другой.
Отправьте из main строку "dart"
во второй изолят и выведите ее длину, которую
вернет дочерняя функция через тот же канал.
Дан следующий код:
import 'dart:isolate';
void main() async {
var receive = ReceivePort();
await Isolate.spawn(worker, receive.sendPort);
}
void worker(SendPort mainSend) {
var inbox = ReceivePort();
mainSend.send(inbox.sendPort);
}
Допишите обмен: из main отправьте
строку "vm", во втором изоляте
прочитайте ее и верните исходный текст
обратно. Выведите ответ.