// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // VMOptions=--enable-isolate-groups --experimental-enable-isolate-groups-jit // VMOptions=--no-enable-isolate-groups import "dart:isolate"; import "dart:async"; import "package:expect/expect.dart"; import "package:async_helper/async_helper.dart"; isomain1(replyPort) { RawReceivePort port = new RawReceivePort(); port.handler = (v) { replyPort.send(v); if (v == 0) port.close(); }; replyPort.send(port.sendPort); } void main() { asyncStart(); var completer = new Completer(); // Completed by first reply from isolate. RawReceivePort reply = new RawReceivePort(completer.complete); Isolate.spawn(isomain1, reply.sendPort).then((Isolate isolate) { List result = []; completer.future.then((echoPort) { reply.handler = (v) { result.add(v); if (v == 0) { Expect.listEquals([4, 3, 2, 1, 0], result); reply.close(); asyncEnd(); } }; echoPort.send(4); echoPort.send(3); Capability resume = isolate.pause(); var pingPort = new RawReceivePort(); pingPort.handler = (_) { Expect.isTrue(result.length <= 2); echoPort.send(0); isolate.resume(resume); pingPort.close(); }; isolate.ping(pingPort.sendPort, priority: Isolate.beforeNextEvent); echoPort.send(2); echoPort.send(1); }); }); }