Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当Dart future';它不再需要了_Dart_Dart Async - Fatal编程技术网

当Dart future';它不再需要了

当Dart future';它不再需要了,dart,dart-async,Dart,Dart Async,这与 在我的例子中,没有HTTP,只有昂贵的计算。我有一个表格/列表,可以滚动浏览。当元素变得可见时,我生成futures来显示计算结果。但是,如果我(最终用户)快速滚动,一些结果将“滚动出视图”,不再需要。这可能是一个很大的数字,并且会严重延迟在当前可见元素中显示有用的未来(结果)的返回。对此可以做些什么吗?干杯,史蒂夫你可以设置一个标志,向延迟的代码(从futures运行)表明不再需要结果。 当调用延迟代码时,它只是返回 库取消\u未来; 导入“dart:async”显示未来、计时器; 导入

这与


在我的例子中,没有HTTP,只有昂贵的计算。我有一个表格/列表,可以滚动浏览。当元素变得可见时,我生成futures来显示计算结果。但是,如果我(最终用户)快速滚动,一些结果将“滚动出视图”,不再需要。这可能是一个很大的数字,并且会严重延迟在当前可见元素中显示有用的未来(结果)的返回。对此可以做些什么吗?
干杯,史蒂夫

你可以设置一个标志,向延迟的代码(从futures运行)表明不再需要结果。 当调用延迟代码时,它只是返回

库取消\u未来;
导入“dart:async”显示未来、计时器;
导入“省道:数学”显示随机;
typedef void TaskFunction(任务任务);
//任务的容器
课堂任务{
//分配的任务id
最终id;
//要处理的数据
int数据;
//向任务函数指示它应停止处理
bool isCanceled=false;
//当所有工作完成时,任务函数必须将此平面设置为true。
bool isFinished=false;
//处理数据并设置结果的任务函数。
任务函数fn;
//任务函数完成处理时设置的结果。
int结果;
任务(this.id、this.data、this.fn);
//开始处理任务。
void execute()=>fn(此);
}
最终rnd=新随机数();
void main(列表参数){
//创建任务
最终任务=新列表.from(generate());
//启动所有任务
tasks.forEach((t)=>t.execute());
//随机延迟后,取消所有未完成的任务
新的未来。延迟(新的持续时间(秒:rnd.nextInt(10)),(){
任务。forEach((t){
如果(!t.isFinished){
t、 isCanceled=true;
}
});
}).然后(){
//检查结果
int done=0;
int=0;
任务。forEach((t){
印刷品(
'任务id:${t.id};isCanceled:${t.isCanceled};isFinished:${t.isFinished};数据:${t.data};结果:${t.result}';
如果(t.isFinished){
完成++;
}
如果(t.isCanceled){
取消++;
}
});
打印('已取消:'已取消');
打印('Done:$Done');
});
}
//工作100个职位的遗传学家
Iterable generate()同步*{
int i=0;
而(i++<100){
生成新任务(i,rnd.nextInt(100),计算);
}
}
//职务职能
无效计算(任务t){
//每100ms做一点工作,以模拟更长的处理时间
新计时器。周期性(新持续时间(毫秒:100),(计时器){
var结果=0;
//检查jost是否已取消,如果已取消,请停止处理。
如果(t.isCanceled){
timer.cancel();
返回;
}
//在没有完成的时候做大量的工作
如果(结果