gpt4 book ai didi

DART:如何编写返回 Future 的耗时函数

转载 作者:行者123 更新时间:2023-12-02 19:48:42 30 4
gpt4 key购买 nike

我必须编写一个耗时的函数,如果它准备好了,它将返回一个 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;
}
}

最佳答案

您的代码可能无法按预期工作,因为您的算法可能会阻止完成器的返回。试试这个方法:

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

这样,您的耗时算法就会异步运行,并立即返回 future 。

我自己没有尝试过,但这个较短的版本也应该可以工作(无需创建完成者)

return new Future.delayed(Duration.ZERO, () {
// timeconsuming algorithm
});

关于DART:如何编写返回 Future 的耗时函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20868809/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com