在dart中以同步和异步方式延迟代码执行的多种方法

1,718 阅读2分钟

本教程解决了以下问题:

  • 如何在Flutter中延迟运行代码?
  • 在dart中对代码进行特定时间的睡眠?

有时您想在一定时间内sleepdelay 代码的执行。

在dart中,您可以通过多种方式实现。代码的执行可以用异步和同步的方式来延迟 在异步代码执行中,你可以使用Future.delayedStream periodicTimer 类 在同步执行中,你可以使用Sleep 方法来顺序执行。

Dart睡眠或延迟代码运行的例子

我们有多种方法可以做到

  • 以同步的方式延迟代码的执行 这个程序使用了睡眠方法。

dart:io package方法提供了一个睡眠方法,它可以在持续时间对象中睡眠线程执行。

void sleep(Duration duration)

一个持续时间是一个用分钟、小时、秒、毫秒和微秒创建的对象。

下面的程序将当前的执行暂停1分钟,并依次执行下一行。

import 'dart:io';

void main() {
  print(DateTime.now());
  sleep(new Duration(minutes: 1));
  print(DateTime.now()); 
}

输出:

2022-04-06 21:37:32.260829
2022-04-06 21:38:32.287419

这种方法是顺序和同步工作的,因为它阻止了当前线程的执行。

  • 异步延迟执行

    我们可以通过多种方式来实现。一种方式是使用Future. delayed 方法dart: async 包为异步执行提供一个Future延迟方法。

它不会阻止当前线程的执行,而是在一个单独的线程中执行指定的代码。

import 'dart:async';

void main() {
  print(DateTime.now());
  Future.delayed(const Duration(minutes: 1));
  print(DateTime.now()); .

}

输出:

2022-04-06 21:44:34.659913
2022-04-06 21:44:34.675738

第二种方式是使用内置的Timer类,使用Duration对象创建的Timer对象,对时间段进行计时。 下面是一个示例程序

import 'dart:async';

void main() {
  print(DateTime.now());
  new Timer(const Duration(seconds: 1), () => print("Executes after 1 second"));
  print(DateTime.now());
}


2022-04-06 21:49:38.827591
2022-04-06 21:49:38.850148
Executes after 1 second

第三种方法是使用Stream periodic async 创建一个具有周期性的流,并在异步执行中只执行3次流。

import 'dart:async';

void main() {
  print(DateTime.now());
  Stream<int> intStream =
      Stream<int>.periodic(const Duration(seconds: 1), (i) => i + 1);

  intStream = intStream.take(3);
  intStream.listen((event) {
    print("executes  ${event} times");
  });

  print(DateTime.now());
}

2022-04-06 21:57:23.059876
2022-04-06 21:57:23.079258
executes  1 times
executes  2 times
executes  3 times

总结

基于同步和异步的延迟,你可以使用其中一种方法。