Skip to content

Асинхронность: Future и Stream

async / await и Future

dart
Future<int> fetchCount() async {
  await Future.delayed(const Duration(milliseconds: 50));
  return 42;
}

Future<void> main() async {
  final count = await fetchCount();
  print(count);
}

Обработка ошибок

dart
Future<void> run() async {
  try {
    await Future<void>.error(Exception('fail'));
  } catch (e) {
    print(e);
  } finally {
    print('done');
  }
}

Parallel await

dart
Future<int> a() async => 1;
Future<int> b() async => 2;

Future<void> main() async {
  final results = await Future.wait<int>([a(), b()]);
  final sum = results.reduce((x, y) => x + y);
  print(sum);
}

Stream и await for

dart
Stream<int> ticks() async* {
  for (var i = 0; i < 3; i++) {
    await Future.delayed(const Duration(milliseconds: 50));
    yield i;
  }
}

Future<void> main() async {
  await for (final t in ticks()) {
    print(t);
  }
}

Stream преобразования

dart
final stream = Stream<int>.fromIterable([1, 2, 3]);
final mapped = stream.map((x) => x * 10);