我在Dartlang中编写了一个程序,它停止处理,直到变量foo
变为false,如下所示。
它是可执行的,但是在while语句中继续返回Future是笨拙的。
有没有办法清楚地写出来?
Future asyncMethod() async {
while (foo) {
await new Future(() {
return null;
});
}
Unity的协程可以写成如下所示的单行,所以我想让它更清晰。
yield return new WaitWhile(() => foo);
答案 0 :(得分:3)
您使用计时器定期轮询变量。有很多方法可以做到这一点。我只是去完全直接的实施:
Future waitWhile(bool test(), [Duration pollInterval = Duration.zero]) {
var completer = new Completer();
check() {
if (!test()) {
completer.complete();
} else {
new Timer(pollInterval, check);
}
}
check();
return completer.future;
}
使用该功能,您只需编写
即可await waitWhile(() => foo);
等待foo
变为假。
答案 1 :(得分:0)
通过使用 Future.doWhile
。
没有轮询间隔:
await Future.doWhile(() => isPaused);
使用轮询间隔:
if (isPaused) {
await Future.doWhile(() => Future.delayed(interval).then((_) => isPaused));
}