Проблема в первом примере заключается в том, что вы не ждете, когда будет сделан изолят в вашем основном потоке / изоляте. Дротик завершается, когда основной поток / изолят не имеют ничего общего и очередь событий пуста.
В следующем примере это «работает», но вы не говорите, что программа никогда не завершает работу. Это связано с тем, что вы создали ReceivePort без прослушивателя, который не позволяет основному потоку / изоляту остановиться, поскольку он теперь ожидает вечно.
Если вместо этого вы используете ReceivePort таким образом, вы можете использовать его для ожидания изолятадолжно быть сделано и выходить из основного цикла только тогда, когда это произойдет:
import 'dart:isolate';
Future<void> main() async {
final rPort = ReceivePort();
await Isolate.spawn(entryPoint, null, onExit: rPort.sendPort);
await rPort.first;
}
void entryPoint(SendPort sendPort) {
getStreamOfNumbers().listen((data) => print('data : $data'));
}
Stream<int> getStreamOfNumbers() async* {
for (var x = 0; x < 10; x++) {
yield x;
}
}