Создание изолятов и обмен сообщениями
Обменивайтесь сообщениями через SendPort и ReceivePort
«Создание изолятов и обмен сообщениями» — бесплатный урок Dart Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.
Ручное управление
Для долгоживущих работников, активно обменивающихся сообщениями, создайте изолят самостоятельно с помощью Isolate.spawn. Вы будете полностью контролировать весь срок его работы.
Точка входа
Isolate.spawn требуется функция верхнего уровня в качестве точки входа, а также один аргумент, который будет передан ей при запуске.
Isolate.spawn(worker, message);Знакомство с ReceivePort
ReceivePort — это Ваш почтовый ящик. Вы прослушиваете его, чтобы получать сообщения, которые другие изоляты отправляют Вам. 📥
final port = ReceivePort();
port.listen((msg) => print(msg));Знакомство с SendPort
Каждый ReceivePort предоставляет SendPort. Тот, у кого есть этот SendPort, может отправлять сообщения в Ваш почтовый ящик.
final SendPort tx = port.sendPort;Передача порта
Чтобы начать обмен сообщениями, передайте новому изоляту SendPort в качестве аргумента при создании. Теперь изолят знает, куда отвечать.
Isolate.spawn(worker, port.sendPort);Ответ работника
Внутри работника используйте полученный SendPort, чтобы send результаты обратно в главный изолят.
void worker(SendPort tx) {
tx.send('done');
}Рукопожатие
Распространённый шаблон — двустороннее рукопожатие: сначала работник отправляет свой SendPort, чтобы обе стороны могли обмениваться сообщениями.
Только передаваемые данные
Сообщения должны быть передаваемыми: числа, строки, списки, отображения и SendPorts. Такие объекты, как открытые файлы или функции, нельзя передать через границу.
Чтение ответов
В основном изоляте обратный вызов listen Вашего ReceivePort срабатывает для каждого ответа. Обрабатывайте ответы по мере их поступления и в исходном порядке.
Закрытие порта
Когда закончите работу, вызовите port.close(). Открытый ReceivePort не даёт программе завершиться, поэтому его закрытие позволяет корректно завершить работу.
Завершение изолята
Сохраните ссылку на изолят и вызовите isolate.kill(), чтобы остановить больше не нужного работника. Своевременно освободите его ресурсы.
Быстрая проверка
Какой порт нужно прослушивать, чтобы получать сообщения?
Итоги
Создайте изолят с помощью Isolate.spawn, затем передайте SendPort, чтобы изоляты могли обмениваться сообщениями. Отправляйте только передаваемые данные и закрывайте порты после завершения работы. ✅
Изучай Dart с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «Создание изолятов и обмен сообщениями» бесплатный?
Да — полный текст урока «Создание изолятов и обмен сообщениями» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.
Чему я научусь в уроке «Создание изолятов и обмен сообщениями»?
Обменивайтесь сообщениями через SendPort и ReceivePort Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Dart Academy?
Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Создание изолятов и обмен сообщениями»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Dart Academy?
Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Почему изоляты, а не потоки
- Isolate.run для быстрой передачи работы
- Создание изолятов и обмен сообщениями
- Ресурсоёмкие задачи без зависаний