Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtSpIsRp 108 of 224 menu
◀ ▶

Ответ из изолята в Dart

Чтобы второй изолят прислал результат, основной сначала получает его SendPort, затем передает свой порт для ответа вместе с заданием. Удобно упаковать пару в список: сначала SendPort для ответа, затем строка.

Дочерняя функция читает список, берет порт и шлет на него число - например длину строки:

import 'dart:isolate'; void main() async { var receive = ReceivePort(); await Isolate.spawn(count, receive.sendPort); var workerSend = await receive.first as SendPort; var replyPort = ReceivePort(); workerSend.send([replyPort.sendPort, "note"]); var answer = await replyPort.first; print(answer); replyPort.close(); receive.close(); } void count(SendPort mainSend) { var inbox = ReceivePort(); mainSend.send(inbox.sendPort); inbox.listen((message) { if (message is List) { var reply = message[0] as SendPort; var text = message[1] as String; reply.send(text.length); } }); }

Ответом может быть int или снова строка. Свой класс без подготовки к передаче лучше не использовать - проще список или примитив. Основной изолят ждет число на отдельном ReceivePort и не блокирует прием общего канала.

Передайте во второй изолят список из порта и строки "run". Верните число символов в строке и выведите его в main.

Дан следующий код:

import 'dart:isolate'; void main() async { var receive = ReceivePort(); await Isolate.spawn(sumCode, receive.sendPort); } void sumCode(SendPort mainSend) { var inbox = ReceivePort(); mainSend.send(inbox.sendPort); inbox.listen((message) { if (message is List) { var reply = message[0] as SendPort; var text = message[1] as String; } }); }

Допишите main и тело обработчика: отправьте строку "ab", посчитайте сумму кодов символов codeUnitAt и верните int. Выведите ответ.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить