bin*_*g45 11 time future delay dart flutter
我想知道 Future.delayed 和 Timer 方法之间延迟代码执行的区别。两者似乎都在做同样的事情。
未来延迟
Future.delayed(const Duration(milliseconds: 500), () { /*code*/ });
Run Code Online (Sandbox Code Playgroud)
VS
计时器
Timer _timer = new Timer(const Duration(milliseconds: 500), () { /*code*/ });
Run Code Online (Sandbox Code Playgroud)
use*_*613 10
定时器:
Timer()创建一个Timer对象,该对象在延迟后运行您的计算。由于您获得了对该对象的引用Timer,因此您可以选择在触发之前通过调用 来取消它cancel。
Timer t = Timer(Duration(seconds: 1), () => print("1 sec later"));
t.cancel(); // nothing will be printed out
Run Code Online (Sandbox Code Playgroud)
未来:
Future.delayed创建一个Future在延迟后运行其计算的 。在内部,它仍然使用 aTimer来做到这一点。它不会向您公开计时器,因此您无法控制或取消它。从好的方面来说,你可以做你正常的未来事情,比如await在上面。
await Future.delayed(Duration(seconds: 1);
print("1 sec later");
Run Code Online (Sandbox Code Playgroud)
对我来说有一些不同。
Future.of 返回一个 Future。Timer 不返回任何东西。因此,如果您的延迟代码返回了您继续工作所需的任何内容,这Future就是要走的路。
其他不同之处在于Timer该类提供了一种重复触发的方法。
此引用来自Timer Class Reference文档本身
可以配置为一次或重复触发的倒数计时器
而例如使用Timer与重复可能
Timer.periodic(Duration(seconds: 5), (timer) {
print(DateTime.now());
});
Run Code Online (Sandbox Code Playgroud)
另一个常见的例子是创建一个秒表来测量代码中的计时,通常使用Timer.
格鲁!!
在给定的持续时间后运行其timer作业,但 flutter 不会等待其完成执行,而是执行以下语句。
例子:
Timer(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
print("Other code");
Run Code Online (Sandbox Code Playgroud)
输出:
Other code
Execute this code after 2 seconds
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,下面的代码将首先执行计时器,然后再执行计时器。此外,如果我们创建 Timer 的对象,则可以在执行之前的任何给定点停止 Timer。
Timer timer = Timer(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
timer.cancel();
Run Code Online (Sandbox Code Playgroud)
它future也会在给定的持续时间后运行其作业,但它返回 future 对象意味着我们可以使用await 首先执行它,然后将执行下面的语句。
await Future.delayed(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
print("My Code");
print("Other code");
Run Code Online (Sandbox Code Playgroud)
输出:
Execute this code after 2 seconds
Other code
Run Code Online (Sandbox Code Playgroud)
其主要缺点future是我们无法在中间取消它。
如果出现以下情况,请使用计时器:
您希望能够取消它。Timer.cancel()取消计时器与取消未来Future不同。CancelableCompleter
如果您不想在回调方法中返回任何内容。
例子:
// Prints 'Hello' after 1s.
var timer = Timer(Duration(seconds: 1), () => print('Hello'));
Run Code Online (Sandbox Code Playgroud)
如果您决定取消它,请使用:
timer.cancel();
Run Code Online (Sandbox Code Playgroud)
在以下情况下使用 Future:
您的代码可能会引发错误,而您希望捕获它们。如果您使用过Timer并且发生任何未捕获的异常,应用程序将退出。
您想从回调方法中返回一些内容。
例子:
// Return 'Hello' after 1s and if there is any error, it will be caught.
Future
.delayed(Duration(seconds: 1), () => 'Hello')
.catchError((err) {});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4406 次 |
| 最近记录: |