es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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.

Comments are closed.