В работе для приложения-флаттера рабочего стола (linux) мне нужно выполнить несколько интенсивных вычислительных задач в изоляции. Но пока этот изолятор выполняет эту долгую операцию, он не читает входящие сообщения (что выглядит логически c). Я хотел бы иметь возможность общаться с ним во время его выступления.
ReceivePort rPort;
SendPort sPort;
Isolate isolate;
void main() {
rPort = ReceivePort();
isolate = await Isolate.spawn(entryPoint, receivePort.sendPort);
sPort = await rPort.first;
sendMessage("perform"); // this is being processed
sendMessage("controlMessage"); // this is being processed after the perform has ended
}
void sendMessage(String msg) {
ReceivePort localReceivePort = ReceivePort();
sendPort.send([msg, localReceivePort.sendPort]);
}
void entryPoint(SendPort sendPort)
{
ReceivePort receivePort = ReceivePort();
sendPort.send(receivePort.sendPort);
receivePort.listen((message) {
String data = msg[0];
SendPort reply = msg[1];
print(data);
if(data == "perform") performBlockingOperation();
else if(data == "controlMessage") controlPerformance();
repy.send("something");
});
}
Я испробовал много вариантов: сделать асинхронное выполнение executeBlockingOperation c, но, похоже, это не работает. Даже попытка создать собственный поток внутри изолята возвращает
.. / .. / third_party / dart / runtime / vm / runtime_entry. cc: 3331: ошибка: не удается вызвать собственный обратный вызов вне изолировать.
Есть ли способ достичь того, что я пытаюсь?