init method

Future<List<int>> init({
  1. required int numThread,
  2. ManSettings? setting,
})

Implementation

Future<List<int>> init({required int numThread, ManSettings? setting}) async {
  //aqui esperamos que se inicialice el isolate y se cree el sendport
  //para que el isolate pueda recibir los mensajes
  List<Future<void>> isolates = [];
  try {
    if (_init) _task.keys.toList();
    for (int i = 0; i < numThread; i++) {
      final Completer completer = Completer<void>();
      int tk = ManSettings().token();
      _task.addAll({
        tk: TaskDownload(status: StatusDownloadIsolate(tokenIsolate: tk)),
      });
      TaskDownload isolate = _task[tk]!;
      isolate.root = await Isolate.spawn<RequestCreate>(
        DownloadManager().createIsolate,
        RequestCreate(
          setting: setting ?? ManSettings(),
          token: tk,
          sendPort: isolate.rcvPort.sendPort,
        ),
      );
      _listingIsolate(isolate, () {
        completer.complete();
      });
      isolates.add(completer.future);
      Future.any([
        completer.future,
        Future.delayed(Duration(seconds: 5)).then((_) {
          throw TimeoutException('El isolate no respondio en 5 segundos');
        }),
      ]);
    }
    await Future.wait(isolates);
    _init = true;
    return _task.keys.toList();
  } catch (e) {
    return [];
  }
}