Класс 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,
который отправляет сообщения в изоляты