Dart 如何在隔离内部创建三个无限循环?

Dart 如何在隔离内部创建三个无限循环?,dart,dart-isolates,Dart,Dart Isolates,我正在学习Dart,并与孤立者一起工作。我编写了下一个代码,并期望它将创建三个独立的进程,它们将无限工作: main() { Isolate.spawn(echo, "Hello"); Isolate.spawn(echo, "Hello2"); Isolate.spawn(echo, "Hello3"); } void echo(var message) { while(true) { print(message); } } 但我得到了非常奇怪的输出

我正在学习Dart,并与孤立者一起工作。我编写了下一个代码,并期望它将创建三个独立的进程,它们将无限工作:

main()  {

  Isolate.spawn(echo, "Hello");
  Isolate.spawn(echo, "Hello2");
  Isolate.spawn(echo, "Hello3");

}


void echo(var message)
{
  while(true)
  {
    print(message);
  }
}
但我得到了非常奇怪的输出,每次都不一样:

$ dart app.dart
Hello
Hello
Hello
Hello
HelloHello2

Hello
Hello3
Hello2
Hello

一旦主隔离结束,VM将终止整个程序。对你来说,这发生在你产卵了所有三个分离物之后。没有任何东西可以让主隔离区保持活动,所以整个程序就结束了。。。最终,当隔离完成时,将关闭。这取决于时间,所以变化很大

要使隔离永远有效,可以创建一个ReceivePort。请尝试添加:

var keepalive = ReceivePort();
对于你的程序,那么它应该永远保持运行

而且,打印不仅仅是包含hello的行的列表,它们是混合的

这三个隔离系统同时运行。它们都写入相同的输出标准输出,因此输出是混合的。不能保证打印调用是原子的,它不是,因此在一个隔离物中的打印调用可能发生在另一个隔离的打印调用的中间。 这里发生的事情是print不仅打印参数,它还打印一个换行符。这是对stdout的两次不同写入,因此另一个隔离可以在Hello和它后面的\n之间打印其消息