#dart #dart-isolates
#дротик #dart-изолирует
Вопрос:
Есть ли способ передать универсальную функцию в качестве параметра изолированному объекту при появлении? Я приложил упрощенную версию своего кода (не работает), но есть ли способ архивировать это без динамики? Или тип functionToCall определяется во время выполнения, а не во время выполнения, и поэтому невозможно выбрать изоляцию?
import 'dart:isolate';
class TestClass {
// ...
}
void main(List<String> args) {
ReceivePort receivePort = ReceivePort();
Isolate.spawn(functionToCall<TestClass>, receivePort.sendPort);
}
void functionToCall<T>(SendPort sendPort) {
// ...
}
Ответ №1:
Все, что касается универсального типа, известно как часть компиляции и «конкретизируется» для того, чтобы одна и та же информация была перепроверена во время выполнения.
Комментарии:
1. Хорошо, это хорошо 🙂 но как я могу передать универсальную функцию методу Isolate.spawn? Я родом из C , где нет проблем с шаблонами и использованием его, как я показал в своем примере.
2. Вероятно, вам нужен только один API для каждого изолята. Если у вас больше API, создавайте больше изолятов. 🙂
Ответ №2:
Я думаю, что проблема здесь, возможно, не столько в изолятах, сколько в том, что я не знаю ни одного способа в Dart, с помощью которого вы могли бы создать ссылку на функцию для универсальной функции.
например, вы можете вызвать, конечно, вызовите свою универсальную функцию:
functionToCall<TestClass>(myPort);
Но я не понимаю, как вы можете создать ссылку на функцию для определенного типа (TestClass) и ссылку на ее функцию, которую вам тоже нужно передать в метод spawn, поэтому я думаю, что это ограничение в Dart, с которым вы сталкиваетесь здесь.