РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
698 of 723 menu

Класс Isolate

Класс Isolate представляет собой независимый поток выполнения в Dart. Каждый изолят имеет собственную память и кучу, что означает, что изоляты не могут напрямую обращаться к переменным друг друга. Для обмена данными между изолятами используются порты: SendPort для отправки сообщений и ReceivePort для их получения. Класс Isolate предоставляет статические методы для создания, запуска и управления изолятами.

Синтаксис

Isolate.spawn(entryPoint, message) Isolate.exit(sendPort, result) Isolate.current

Пример

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

import 'dart:isolate'; void worker(SendPort sendPort) { ReceivePort receivePort = ReceivePort(); sendPort.send(receivePort.sendPort); receivePort.listen((message) { int number = message as int; sendPort.send(number * 2); }); } void main() async { ReceivePort receivePort = ReceivePort(); Isolate isolate = await Isolate.spawn(worker, receivePort.sendPort); SendPort? sendPort; receivePort.listen((message) { if (message is SendPort) { sendPort = message; sendPort.send(5); } else { print(message); } }); }

Результат выполнения кода:

10

Пример

Давайте используем метод Isolate.exit для немедленного завершения изолята с возвратом результата:

import 'dart:isolate'; void worker(SendPort sendPort) { int res = 0; for (int i = 1; i <= 5; i++) { res += i; } Isolate.exit(sendPort, res); } void main() async { ReceivePort receivePort = ReceivePort(); await Isolate.spawn(worker, receivePort.sendPort); receivePort.listen((message) { print(message); }); }

Результат выполнения кода:

15

Пример

Давайте получим информацию о текущем изоляте с помощью свойства Isolate.current:

import 'dart:isolate'; void main() { Isolate current = Isolate.current; print(current.debugName); print(current.hashCode); }

Результат выполнения кода:

"main" 123456789

Смотрите также

  • метод spawn,
    который создаёт новый изолят
  • метод exit,
    который завершает текущий изолят
  • класс ReceivePort,
    который принимает сообщения от изолятов
  • класс SendPort,
    который отправляет сообщения в изоляты
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить