是Future的超时方法坏了吗? [英] Is Future's timeout method broken?

查看:597
本文介绍了是Future的超时方法坏了吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个长期运行的任务,我想要与一个未来异步运行,但我也希望它最终超时。在我看来,我的超时从来没有被调用 - 但也许我没有正确使用超时?

I have a long running task that I want to run asynchronously with a Future, but I also want it to timeout eventually. It seems to me that my timeout is never being called - but perhaps I am not using timeout correctly?

// do actual solution finding asychronously
Future populateFuture = new Future(() {
  populateGrid(words, gridWidth, gridHeight);
});
populateFuture.timeout(const Duration(seconds: 3), onTimeout: () {
  window.alert("Could not create a word search in a reasonable amount of time.");
});

// after being done, draw it if one was found
populateFuture.then((junk) {
  wordSearchGrid.drawOnce();
});

这是在版本1.3.0-dev.4.1也许我只是误会如何使用超时

This is under version 1.3.0-dev.4.1 Perhaps I am just misunderstanding how to use timeout

推荐答案

Dart有单个执行线程


一旦Dart函数开始执行,它会继续执行,直到退出。换句话说,Dart函数不能被其他Dart代码中断。

Once a Dart function starts executing, it continues executing until it exits. In other words, Dart functions can’t be interrupted by other Dart code.

如果 populateGrid 不允许事件循环切换到超时部分,将不会执行超时检查。这意味着您必须通过引入 Future 计算 populateGrid 的代码<以允许通过 timeout 函数进行定期检查。

If populateGrid doesn't allow the event loop to switch to the timeout part the timeout checks will not be executed. That means you have to break the code of populateGrid into several part by introducing Future computations to allow regular checks by the timeout function.

这篇关于是Future的超时方法坏了吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆