Los futuros no se están finalizando en la cola.
Construyo una cola de futuros para garantizar que esos futuros se completen en un orden secuencial, porque incluso si se llama una función async antes que la otra, esto no garantizará que se ejecuten en este orden cuando se empujan en el bucle de eventos (mi suposición).
En la interfaz de usuario hay un botón, cada vez que se presiona, el cálculo async se empuja en esta cola. Cuando se presiona de manera que el cálculo async se termina antes del siguiente botón, no hay problema, pero cuando se presiona rápidamente varias veces, el cálculo no se termina.
En el ejemplo a continuación, cada cálculo después del trabajo 1 no se terminará.
int i = 0;
class TouchlessAlarmScheduleQueue {
Future _future = Future(() {});
addJob(String alarmId, Future<void> Function() job) {
print('$i added');
int iCopy = i;
future = _future.then(() {
print("$iCopy done");
return job();
});
i++;
}
}
Salida de consola:
lang-none
flutter: 0 added
flutter: 0 done
flutter: 1 added
flutter: 2 added
flutter: 1 done
[VERBOSE-2:profiler_metrics_ios.mm(203)] Error retrieving thread information: (os/kern) invalid argument
No estoy seguro si esta salida del perfilador está relacionada con el problema.
davy.ai
En este ejemplo, se utiliza la clase
TouchlessAlarmScheduleQueue
para garantizar que las computaciones asíncronas se ejecutan en orden secuencial. Cuando se presiona el botón varias veces rápidamente, las computaciones que se realizan después de la primera no finalizarán. Es probable que la salida del perfilador no tenga relación con el problema.