Что вы собираетесь узнать: как запускать фоновые задачи в dart или что такое Isolate? Как реализовать новый Isolate? Как получить сообщения от нового изолята? Как передать между ними направленные сообщения?
Dart - это однопоточный язык, но он поддерживает выполнение асинхронных / фоновых / длительных задач с использованием Isolates. Dart позволяет создавать / запускать несколько изолятов в одном приложении.
Чтобы прочитать другие статьи по асинхронному кодированию: нажмите здесь ссылка
Что такое изолят?
Определение: изолировать - это то, в чем работает весь код Dart.
Давайте разберем это определение на части: Что такое Isolate ???
1- Используйте для реализации параллельного программирования.
2- Имеет собственный частный фрагмент памяти.
3- Каждый из них имеет отдельный цикл событий, который выполняется все время и перехватывает события (касание, выполнение сетевого вызова, данные поступают из сети и т. Д.) И обрабатывают их.
4- Независимый исполнитель, который похож на поток, но не разделяет память
5- Общается только через сообщения с другими изолятами.
Как реализовать новый Isolate?
Чтобы создать новый изолятор с помощью метода «spawn» класса « Isolate », необходимы как минимум два параметра:
1- Имя метода с кодом нового изолята
Isolate.spawn(runSomethingOnNewIsolate, ........);
2- Объект может быть любого типа (String, int, Custom class и т. д.).
Isolate.spawn(..............., 'first long task');
Примечание. Сразу после создания нового элемента управления Isolate этого основного изолята начните выполнение следующих инструкций под строкой создания нового изолята, где новый Isolate продолжает работать параллельно с основным / другими изолятами.
Чтобы уничтожить любой изолят, вызовите его метод kill:
isolate.kill(priority: Isolate.immediate);
Вот полный код новой реализации изолята:
Как получать сообщения от нового Isolate?
Для получения сообщений от вновь созданного Isolate используйте класс «ReceivePort». Две главные вещи в этом классе:
1- «receivePort.sendPort» используется для отправки сообщения
2- «receivePort.listen ((динамические полученныеДанные) {});» использовать для получения сообщений, отправленных «sendPort»
Примечание. «listen» и «sendPort» должны относиться к одному и тому же объекту «receivePort».
Вот полный код получения сообщений от нового изолята:
Как передавать направленные сообщения между изоляторами?
Есть два способа передавать сообщение между изолятами: i- Использование «ReceivePort» почти так же, как мы учимся получать сообщения от вновь созданного изолята. ii- Использование зависимости stream_channel, разработанной командой dart (простой в использовании).
i- Использование «ReceivePort»:
Как и в предыдущем случае, только передавайте «ReceivePort» от обоих изолятов друг другу:
Вот его полный код:
ii- Использование зависимости stream_channel (рекомендуется):
1- Добавить зависимость stream_channel в файл pubspec.yaml
dependencies: stream_channel: ^2.0.0
2- Установите для объекта receivePort значение IsolateChannel.connectReceive () и установите для sendPort того же объекта receivePort значение IsolateChannel.connectSend ().
3- Для обмена сообщениями между ними используйте «channel.sink.add (« message »)» и используйте channel.stream.listen ((динамические данные) {}); получить сообщение.
Вот его полный код:
Загрузите полный исходный код с Github:
"ссылка на сайт"
Https://github.com/codinghivedev/dart_isolates