Dart Изолирует доступ к экземпляру общего объекта
В настоящее время я работаю с изолятами для отправки запросов параллельно серверу базы данных. У меня есть объект-коннектор для создания соединения с базой данных, и я хотел бы поделиться им со всеми изолятами, поэтому мне не нужно создавать отдельное соединение для каждого изолята.
Пока что кажется, что я могу разделять только специальные сериализуемые объекты между изолятами. Я использую порты отправки и получения для обмена сообщениями. Для других объектов (таких как мой соединитель-объект) dart-vm выдает ошибку:
Illegal argument(s): Illegal argument in isolate message : (object extends NativeWrapper)
Знаете ли вы какой-нибудь способ разделить общий экземпляр объекта между несколькими изолятами? Или я должен создать отдельный экземпляр для каждого изолята?
Спасибо!
Pedro
1 ответ
Из документа метода SendPort.send
* In the special circumstances when two isolates share the same code and are
* running in the same process (e.g. isolates created via [Isolate.spawn]), it
* is also possible to send object instances (which would be copied in the
* process). This is currently only supported by the dartvm. For now, the
* dart2js compiler only supports the restricted messages described above.
Я предполагаю, что объекты, которые являются обертками нативных объектов, также не поддерживаются.
Кажется, в настоящее время единственный способ - создать новое соединение в каждом изоляте.
Всегда работают такие ценности
* The content of [message] can be: primitive values (null, num, bool, double,
* String), instances of [SendPort], and lists and maps whose elements are any
* of these. List and maps are also allowed to be cyclic.