【问题标题】:Futures aren't finishing in queue期货没有在队列中完成
【发布时间】:2021-12-29 04:19:06
【问题描述】:

我构建了一个期货队列,以确保这些期货按顺序完成,因为即使在另一个异步函数之前调用了一个异步函数,这也不能确保它们在被推送到事件循环时按此顺序执行(我的假设)。

在 UI 中有一个按钮,每次按下它时,异步计算都会被推送到这个队列中。在按下下一个按钮之前以异步计算完成的方式按下时没有问题,但当快速按下多次时,计算将无法完成。

在下面的示例中,作业 1 之后的每个计算都不会完成。

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++;
  }
}

控制台输出:

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

不确定此分析器输出是否与问题有关。

【问题讨论】:

  • 你能提供一个最小的、完整的、可重现的例子吗?
  • 显然这是我的一个工作职能内部的东西,它正在与一些特定于平台的代码进行通信,导致这种行为我构建的队列是正确的

标签: flutter dart asynchronous data-structures


【解决方案1】:

在这里工作得很好:

为了清楚起见,您可能应该只使用 async/await。我以前做过同样的事情。我在 oun 生产应用程序中使用了改进版本:https://twitter.com/gazialankus/status/1364695537585381378

【讨论】:

    猜你喜欢
    • 2018-05-05
    • 2015-05-17
    • 2022-11-04
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2013-06-29
    • 2021-09-21
    相关资源
    最近更新 更多