runService method

void runService({
  1. required Future<void> start(
    1. K key,
    2. DspReg disposers
    ),
  2. required DspReg disposers,
})

Implementation

void runService({
  required Future<void> Function(K key, DspReg disposers) start,
  required DspReg disposers,
}) {
  final running = <K, DspImpl>{};

  final processDisposers = DspImpl();
  processDiffs(
    added: (item) async {
      final itemDsp = DspImpl();
      running[item] = itemDsp;
      await start(item, itemDsp);
    },
    removed: (item) async {
      final itemDsp = running.remove(item)!;
      await itemDsp.dispose();
    },
    disposers: processDisposers,
  );

  disposers.add(() async {
    await processDisposers.dispose();
    await Future.wait(
      running.values.map(
        (e) => e.dispose(),
      ),
    );
  });
}