Flutter 颤振中Future.delayed与Timer的区别是什么
我想知道Future.delayed和用于延迟代码执行的计时器方法之间的区别。两者似乎做了同样的事情 未来。延迟Flutter 颤振中Future.delayed与Timer的区别是什么,flutter,dart,time,delay,future,Flutter,Dart,Time,Delay,Future,我想知道Future.delayed和用于延迟代码执行的计时器方法之间的区别。两者似乎做了同样的事情 未来。延迟 Future.delayed(const Duration(milliseconds: 500), () { /*code*/ }); VS 计时器 Timer _timer = new Timer(const Duration(milliseconds: 500), () { /*code*/ }); 对我来说有几点不同 Future.of返回未来 计时器不返回任何内容 因
Future.delayed(const Duration(milliseconds: 500), () { /*code*/ });
VS
计时器
Timer _timer = new Timer(const Duration(milliseconds: 500), () { /*code*/ });
对我来说有几点不同
返回未来Future.of
不返回任何内容计时器
Future
另一个区别是,
Timer
类提供了一种重复开火的方法
此引用自文档本身
倒计时计时器,可配置为一次触发或重复触发
使用Timer
和repeat的示例可以是
Timer.periodic(Duration(seconds: 5), (timer) {
print(DateTime.now());
});
另一个常见的例子是创建秒表,以测量代码中的计时,通常使用计时器查看
德国劳埃德船级社 计时器:
Timer(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
print("Other code");
Other code
Execute this code after 2 seconds
Execute this code after 2 seconds
Other code
Timer()
创建一个Timer
对象,在延迟后运行计算。由于您获得了对该计时器
对象的引用,因此可以通过调用取消
来选择在它被激发之前取消它
Timer t = Timer(Duration(seconds: 1), () => print("1 sec later"));
t.cancel(); // nothing will be printed out
未来:
Timer(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
print("Other code");
Other code
Execute this code after 2 seconds
Execute this code after 2 seconds
Other code
Future.delayed
创建一个Future
,在延迟后运行其计算在内部,它仍在使用计时器来执行此操作。
它不会向您公开计时器,因此您无法控制或取消它。好的一面是,你可以做你未来正常的事情,比如等待
await Future.delayed(Duration(seconds: 1);
print("1 sec later");
在以下情况下使用计时器:
Timer(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
print("Other code");
Other code
Execute this code after 2 seconds
Execute this code after 2 seconds
Other code
- 你想要取消它的能力。使用
Timer.cancel()
可以取消计时器,而不像Future
那样需要使用CancelableCompleter
来取消未来
- 如果您不想在回调方法中返回任何内容
例如:
//在1s后打印“Hello”。
var timer=timer(持续时间(秒:1),()=>print('Hello');
如果您决定取消,请使用:
timer.cancel();
如果:
Timer(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
print("Other code");
Other code
Execute this code after 2 seconds
Execute this code after 2 seconds
Other code
- 您的代码可能会抛出错误,您希望捕获它们。如果您使用了
计时器
,并且出现任何未捕获的异常,应用程序将退出
- 您希望从回调方法返回一些内容
例如:
//1s后返回'Hello',如果有任何错误,将被捕获。
未来
.延迟(持续时间(秒数:1),()=>“您好”)
.catchError((err){});
计时器在给定的持续时间后运行其作业,但不会等待其完成执行,它会执行以下语句
示例:
Timer(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
print("Other code");
Other code
Execute this code after 2 seconds
Execute this code after 2 seconds
Other code
输出:
Timer(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
print("Other code");
Other code
Execute this code after 2 seconds
Execute this code after 2 seconds
Other code
所以,正如您所看到的,定时器将首先执行下面的代码,然后执行定时器。
此外,如果我们将计时器的对象装箱,计时器可以在执行之前的任何给定点停止
Timer timer = Timer(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
timer.cancel();
future
也会在给定的持续时间后运行它的作业,但是它的returnfuture对象意味着我们可以使用wait来首先执行它,然后执行下面的语句
await Future.delayed(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
print("My Code");
print("Other code");
输出:
Timer(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
print("Other code");
Other code
Execute this code after 2 seconds
Execute this code after 2 seconds
Other code
未来
的主要缺点是我们不能在两者之间取消它。另一个重要区别是可以取消计时器。另外,为了测量时间,通常你应该使用课堂。