Skip to content

源码:labs/dart/host/bin/runtime_concurrency/event_loop_isolate_demo.dart

  • 原始路径:labs/dart/host/bin/runtime_concurrency/event_loop_isolate_demo.dart
  • 类型:dart
dart
import 'dart:async';
import 'dart:isolate';

Future<void> main() async {
  print('1. sync start');

  scheduleMicrotask(() => print('2. microtask via scheduleMicrotask'));
  Future.microtask(() => print('3. microtask via Future.microtask'));
  Future(() => print('5. event queue future'));

  final chained = Future(() {
    print('4. future body before await continuation');
    return 'future-result';
  });

  final futureResult = await chained;
  print('6. await resumed with $futureResult');

  final isolateResult = await Isolate.run(() => _countPrimesUnder(20000));
  print('7. isolate result: $isolateResult primes below 20000');
  print('8. sync end');
}

int _countPrimesUnder(int max) {
  var count = 0;
  for (var i = 2; i < max; i++) {
    if (_isPrime(i)) {
      count++;
    }
  }
  return count;
}

bool _isPrime(int value) {
  for (var i = 2; i * i <= value; i++) {
    if (value % i == 0) {
      return false;
    }
  }
  return value > 1;
}