Dart by Example: Isolates

  1. import 'dart:async';
  2. import 'dart:isolate';
  3. main() async {
  4. var receivePort = new ReceivePort();
  5. await Isolate.spawn(echo, receivePort.sendPort);
  6. // The 'echo' isolate sends it's SendPort as the first message
  7. var sendPort = await receivePort.first;
  8. var msg = await sendReceive(sendPort, "foo");
  9. print('received $msg');
  10. msg = await sendReceive(sendPort, "bar");
  11. print('received $msg');
  12. }
  13. // the entry point for the isolate
  14. echo(SendPort sendPort) async {
  15. // Open the ReceivePort for incoming messages.
  16. var port = new ReceivePort();
  17. // Notify any other isolates what port this isolate listens to.
  18. sendPort.send(port.sendPort);
  19. await for (var msg in port) {
  20. var data = msg[0];
  21. SendPort replyTo = msg[1];
  22. replyTo.send(data);
  23. if (data == "bar") port.close();
  24. }
  25. }
  26. /// sends a message on a port, receives the response,
  27. /// and returns the message
  28. Future sendReceive(SendPort port, msg) {
  29. ReceivePort response = new ReceivePort();
  30. port.send([msg, response.sendPort]);
  31. return response.first;
  32. }
  1. $ isolates.dart
  2. received foo
  3. received bar

by @jryanio | source | license