Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振中Future.delayed与Timer的区别是什么_Flutter_Dart_Time_Delay_Future - Fatal编程技术网

Flutter 颤振中Future.delayed与Timer的区别是什么

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和用于延迟代码执行的计时器方法之间的区别。两者似乎做了同样的事情

未来。延迟

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

未来
的主要缺点是我们不能在两者之间取消它。

另一个重要区别是可以取消
计时器。另外,为了测量时间,通常你应该使用课堂。