我必须编写一个耗时的函数,如果准备好了,它将返回一个Future。下面的方法是否正确,还是我的第9行中耗时的算法阻塞了程序,直到准备就绪。在这种情况下,我该怎么做,才能将控制权交还给事件循环,或者还有什么解决方案?
Future<int> timeconsumingFunctionReturningFuture(int i) {
var completer = new Completer();
if (i==0) {
completer.completeError(88);
return completer.future;
} else {
int rc;
// Line9: rc = timeconsuming algorithm, to calculate rc
completer.complete(rc);
return completer.future;
}
}
Tnx Micha
您的代码可能无法按预期方式工作,因为算法可能会阻止完成程序的返回。尝试这种方式:
Future<int> timeconsumingFunctionReturningFuture(int i) {
var completer = new Completer();
if (i==0) {
completer.completeError(88);
} else {
Timer.run(() {
int rc;
// Line9: rc = timeconsuming algorithm, to calculate rc
completer.complete(rc);
});
}
return completer.future;
}
这样,您的耗时算法将异步运行,并且将来会立即返回。
我自己没有尝试过,但是这个较短的版本也可以使用(无需创建完成程序)
return new Future.delayed(Duration.ZERO, () {
// timeconsuming algorithm
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句