Future.delayed 与 Flutter 中的 Timer 有什么区别
What is the difference between Future.delayed vs Timer in flutter
我想知道Future.delayed和Timer方法延迟代码执行的区别。两者似乎做同样的事情。
Future.delayed
Future.delayed(const Duration(milliseconds: 500), () { /*code*/ });
VS
定时器
Timer _timer = new Timer(const Duration(milliseconds: 500), () { /*code*/ });
对我来说有几点不同。
Future.of
return是未来。
Timer
没有 return 任何东西。
因此,如果您的延迟代码 return是您继续工作所需的任何东西,Future
是正确的选择。
另一个区别是 Timer
class 提供了一种重复触发的方式。
此引用来自 Timer Class Reference 文档本身
A count-down timer that can be configured to fire once or repeatedly
使用 Timer
和 repeat 的例子可以是
Timer.periodic(Duration(seconds: 5), (timer) {
print(DateTime.now());
});
另一个常见的例子是创建一个秒表,以测量代码中的时间,通常使用Timer
。
GL!!
定时器:
Timer()
创建一个 Timer
对象,它会在延迟后运行您的计算。由于您获得了对该 Timer
对象的引用,您可以选择在它被触发之前通过调用 cancel
.
来取消它
Timer t = Timer(Duration(seconds: 1), () => print("1 sec later"));
t.cancel(); // nothing will be printed out
未来:
Future.delayed
创建一个 Future
在延迟后运行其计算。 在内部,它仍在使用 Timer
来执行此操作。 它不会向您公开计时器,因此您无法控制或取消它。从好的方面来说,你可以做正常的 Future 事情,比如 await
。
await Future.delayed(Duration(seconds: 1);
print("1 sec later");
在以下情况下使用计时器:
您想要取消它的能力。使用 Timer.cancel()
你可以取消计时器,不像 Future
你必须使用 CancelableCompleter
来取消 Future。
如果您不想return回调方法中的任何内容。
示例:
// Prints 'Hello' after 1s.
var timer = Timer(Duration(seconds: 1), () => print('Hello'));
如果您决定取消它,请使用:
timer.cancel();
在以下情况下使用 Future:
您的代码可能会抛出错误,而您想捕获它们。如果您使用 Timer
并且发生任何未捕获的异常,应用程序将退出。
您想 return 从您的回调方法中得到一些东西。
示例:
// Return 'Hello' after 1s and if there is any error, it will be caught.
Future
.delayed(Duration(seconds: 1), () => 'Hello')
.catchError((err) {});
timer
在给定的持续时间后运行其作业,但 flutter 并未等待其完成执行,而是执行以下语句。
示例:
Timer(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
print("Other code");
输出:
Other code
Execute this code after 2 seconds
所以你可以看到下面的代码会先执行定时器,然后再执行定时器。
此外,如果我们创建定时器的对象,定时器可以在其执行之前的任何给定点停止。
Timer timer = Timer(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
timer.cancel();
future
也会在给定的持续时间后运行它的作业,但是它的 return future 对象意味着我们可以使用 await 先让它执行,然后下面的语句将要执行。
await Future.delayed(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
print("My Code");
print("Other code");
输出:
Execute this code after 2 seconds
Other code
future
的主要缺点是我们不能在中间取消它。
我想知道Future.delayed和Timer方法延迟代码执行的区别。两者似乎做同样的事情。
Future.delayed
Future.delayed(const Duration(milliseconds: 500), () { /*code*/ });
VS
定时器
Timer _timer = new Timer(const Duration(milliseconds: 500), () { /*code*/ });
对我来说有几点不同。
Future.of
return是未来。Timer
没有 return 任何东西。
因此,如果您的延迟代码 return是您继续工作所需的任何东西,Future
是正确的选择。
另一个区别是 Timer
class 提供了一种重复触发的方式。
此引用来自 Timer Class Reference 文档本身
A count-down timer that can be configured to fire once or repeatedly
使用 Timer
和 repeat 的例子可以是
Timer.periodic(Duration(seconds: 5), (timer) {
print(DateTime.now());
});
另一个常见的例子是创建一个秒表,以测量代码中的时间,通常使用Timer
。
GL!!
定时器:
Timer()
创建一个 Timer
对象,它会在延迟后运行您的计算。由于您获得了对该 Timer
对象的引用,您可以选择在它被触发之前通过调用 cancel
.
Timer t = Timer(Duration(seconds: 1), () => print("1 sec later"));
t.cancel(); // nothing will be printed out
未来:
Future.delayed
创建一个 Future
在延迟后运行其计算。 在内部,它仍在使用 Timer
来执行此操作。 它不会向您公开计时器,因此您无法控制或取消它。从好的方面来说,你可以做正常的 Future 事情,比如 await
。
await Future.delayed(Duration(seconds: 1);
print("1 sec later");
在以下情况下使用计时器:
您想要取消它的能力。使用
Timer.cancel()
你可以取消计时器,不像Future
你必须使用CancelableCompleter
来取消 Future。如果您不想return回调方法中的任何内容。
示例:
// Prints 'Hello' after 1s. var timer = Timer(Duration(seconds: 1), () => print('Hello'));
如果您决定取消它,请使用:
timer.cancel();
在以下情况下使用 Future:
您的代码可能会抛出错误,而您想捕获它们。如果您使用
Timer
并且发生任何未捕获的异常,应用程序将退出。您想 return 从您的回调方法中得到一些东西。
示例:
// Return 'Hello' after 1s and if there is any error, it will be caught. Future .delayed(Duration(seconds: 1), () => 'Hello') .catchError((err) {});
timer
在给定的持续时间后运行其作业,但 flutter 并未等待其完成执行,而是执行以下语句。
示例:
Timer(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
print("Other code");
输出:
Other code
Execute this code after 2 seconds
所以你可以看到下面的代码会先执行定时器,然后再执行定时器。 此外,如果我们创建定时器的对象,定时器可以在其执行之前的任何给定点停止。
Timer timer = Timer(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
timer.cancel();
future
也会在给定的持续时间后运行它的作业,但是它的 return future 对象意味着我们可以使用 await 先让它执行,然后下面的语句将要执行。
await Future.delayed(Duration(seconds: 2), () {
print("Execute this code afer 2 seconds");
});
print("My Code");
print("Other code");
输出:
Execute this code after 2 seconds
Other code
future
的主要缺点是我们不能在中间取消它。