【发布时间】: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