Что вы собираетесь узнать: как запускать фоновые задачи в 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



Спасибо за чтение, если хотите, подписывайтесь на меня.