【发布时间】:2022-06-13 05:25:17
【问题描述】:
我试图在单独的进程中运行繁重的计算(通过使用compute),以免阻塞 UI。我的问题是计算取决于屏幕上的项目,因此它们需要与视图一起更改。我认为我可以做的是使用 compute 开始计算。这样做的问题是,如果视图发生变化,上次开始的计算将毫无用处,所以我想尽快停止它们。
这是函数占位符:
double computeValue(int? value) {
double sum = 0.0;
int index = 0;
int count = 20000000;
while(index < count){
sum += Random().nextDouble();
index++;
}
print("Finished Computation!");
return sum / count;
}
如果我在触摸时运行此功能,一切正常,UI 不会冻结,大约 5 秒后我会得到结果。我的问题是,如果我在第一个功能完成运行之前再次触摸按钮,它将运行完成 2 次。我尝试使用Isolate.spawn 代替compute 并使用Isolate.kill 杀死隔离,然后再次生成它,但它仍然运行到完成两次。有没有办法可以成功停止我用Isolate.spawn 或compute 调用的方法?
【问题讨论】: