Класс SendPort
Класс SendPort используется для отправки сообщений
в изолят. Объект этого класса получается через свойство
sendPort класса ReceivePort. Метод send
принимает один параметр - сообщение, которое нужно
отправить. Сообщение может быть любого типа, однако
оно должно быть передаваемым между изолятами (примитивы,
списки, карты, SendPort и т.д.).
Синтаксис
SendPort sendPort;
sendPort.send(message);
Пример
Давайте создадим изолят и отправим в него сообщение
с помощью SendPort:
import 'dart:isolate';
void isolateFunction(SendPort sendPort)
{
ReceivePort receivePort = ReceivePort();
sendPort.send(receivePort.sendPort);
receivePort.listen((message) {
print('Received: $message');
});
}
void main() async
{
ReceivePort receivePort = ReceivePort();
await Isolate.spawn(isolateFunction, receivePort.sendPort);
SendPort? sendPort;
receivePort.listen((message) {
if (message is SendPort) {
sendPort = message;
sendPort.send('abcde');
}
});
}
Результат выполнения кода:
"Received: abcde"
Пример
Давайте отправим список чисел в изолят через SendPort:
import 'dart:isolate';
void isolateFunction(SendPort sendPort)
{
ReceivePort receivePort = ReceivePort();
sendPort.send(receivePort.sendPort);
receivePort.listen((message) {
print('Received: $message');
});
}
void main() async
{
ReceivePort receivePort = ReceivePort();
await Isolate.spawn(isolateFunction, receivePort.sendPort);
SendPort? sendPort;
receivePort.listen((message) {
if (message is SendPort) {
sendPort = message;
sendPort.send([1, 2, 3, 4, 5]);
}
});
}
Результат выполнения кода:
"Received: [1, 2, 3, 4, 5]"
Смотрите также
-
класс
Isolate,
который представляет изолят -
метод
spawn,
который создает новый изолят -
класс
ReceivePort,
который принимает сообщения от изолятов -
метод
send,
который отправляет сообщение в изолят