init method
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 [];
}
}