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.
Другие вопросы по тегам