spawnWorker<T extends PersistorWorker<S>, S extends PersistorWorkerConfig> method

Future<void> spawnWorker<T extends PersistorWorker<S>, S extends PersistorWorkerConfig>(
  1. T factory(
    1. S config
    ), {
  2. required S config,
})

Spawns an instance of the worker specified by the factory on a background isolate and returns a PersistorWorkerMessenger for communicating with the spawned worker.

Implementation

Future<void> spawnWorker<T extends PersistorWorker<S>,
    S extends PersistorWorkerConfig>(
  T Function(S config) factory, {
  required S config,
}) async {
  worker = PersistorWorkerMessenger(logger: logger, onSync: onSync);
  final message = InitMessageRequest(sendPort: worker.receivePort.sendPort);
  final completer = worker.index[message.id] = Completer();

  // The encrypter must be initialized on the main isolate. If it has not been done so yet,
  // then initialize it before spawning the worker.
  await encrypter.init();

  await Isolate.spawn(
    _entrypoint<T, S>,
    EntrypointArgs(
      config: config,
      factory: factory,
      message: message,
      encrypter: encrypter,
    ),
    debugName: 'PersistorWorker',
  );

  return completer.future;
}