Advertisement
Guest User

Untitled

a guest
Dec 19th, 2014
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.73 KB | None | 0 0
  1. import "dart:isolate";
  2. import "dart:async";
  3.  
  4. abstract class Worker<I, O> {
  5. final I input;
  6.  
  7. Worker(this.input);
  8.  
  9. O doWork();
  10.  
  11. void run(SendPort port) {
  12. new Future.value(doWork()).then((value) {
  13. port.send(value);
  14. });
  15. }
  16.  
  17. Future<O> spawn() {
  18. var receiver = new ReceivePort();
  19. return Isolate.spawn(doStuff, new WorkerMessage(this, receiver.sendPort)).then((isolate) {
  20. return receiver.first;
  21. }).then((value) {
  22. receiver.close();
  23. return value;
  24. });
  25. }
  26. }
  27.  
  28. class WorkerMessage {
  29. final Worker worker;
  30. final SendPort sendPort;
  31.  
  32. WorkerMessage(this.worker, this.sendPort);
  33.  
  34. void doWork() {
  35. worker.run(sendPort);
  36. }
  37. }
  38.  
  39. doStuff(WorkerMessage message) {
  40. message.doWork();
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement