Освоение Dart Delay: полное руководство по асинхронному программированию

Dart — мощный язык программирования, обеспечивающий надежную поддержку асинхронного программирования. Одним из ключевых аспектов асинхронного программирования является управление задержками или паузами при выполнении кода. В этой статье мы рассмотрим различные методы и приемы реализации задержек в Dart, а также приведем примеры кода для каждого подхода.

  1. Future.delayed():
    Dart предоставляет метод Future.delayed(), который позволяет вам ввести задержку перед выполнением определенного блока кода. Задержка указывается в миллисекундах, и метод возвращает Future, которое завершается после периода задержки. Вот пример:
void main() {
  print('Start');
  Future.delayed(Duration(seconds: 2), () {
    print('Delayed task');
  });
  print('End');
}

Выход:

Start
End
Delayed task
  1. Класс Timer:
    Класс Timer в Dart предоставляет способ выполнения кода по истечении определенного времени. Он обеспечивает большую гибкость по сравнению с Future.delayed(), поскольку позволяет периодически выполнять код. Вот пример:
void main() {
  print('Start');
  Timer(Duration(seconds: 2), () {
    print('Delayed task');
  });
  print('End');
}

Выход:

Start
End
Delayed task
  1. Stream и StreamSubscription:
    Dart’s Stream API предоставляет мощный механизм для обработки асинхронных событий. Вы можете использовать StreamController для создания потока и StreamSubscription для прослушивания событий с задержкой. Вот пример:
import 'dart:async';
void main() {
  print('Start');
  StreamController<int> controller = StreamController<int>();
  StreamSubscription<int> subscription = controller.stream.listen((event) {
    print('Delayed task: $event');
  });
  Timer(Duration(seconds: 2), () {
    controller.add(42);
  });
  Timer(Duration(seconds: 4), () {
    subscription.cancel();
  });
  print('End');
}

Выход:

Start
End
Delayed task: 42
  1. Completer и Future:
    Класс Dart Completer позволяет вручную завершить Future в определенное время. Это может быть полезно, если вы хотите отложить завершение Future до тех пор, пока не будет выполнено определенное условие. Вот пример:
import 'dart:async';
void main() {
  print('Start');
  Completer<String> completer = Completer<String>();
  Future<String> future = completer.future;
  Timer(Duration(seconds: 2), () {
    completer.complete('Delayed task');
  });
  future.then((value) {
    print(value);
  });
  print('End');
}

Выход:

Start
End
Delayed task

В этой статье мы рассмотрели различные методы реализации задержек в Dart. От использования Future.delayed()и класса Timer до использования Streams и Completers, Dart предоставляет множество вариантов обработки асинхронных задержек. Освоив эти методы, вы сможете эффективно управлять асинхронным выполнением кода, повышать производительность и создавать адаптивные приложения.