GithubHelp home page GithubHelp logo

iso's Introduction

Iso

pub package

An isolates runner that handles bidirectionnal communication. Run some code in an isolate and communicate with it.

Example

import 'package:iso/iso.dart';

void run(IsoRunner iso) async {
  int counter = 0;
  // init the data in channel
  iso.receive();
  // listen to the data coming in
  iso.dataIn.listen((dynamic data) {
    counter = counter + int.parse("$data");
    // send into the main thread
    iso.send(counter);
  });
}

void main() async {
  final iso = Iso(run, onDataOut: (dynamic data) => print("Counter: $data"));
  iso.run();
  await iso.onCanReceive;
  // now we can send messages to the isolate
  while (true) {
    await Future<dynamic>.delayed(Duration(seconds: 1));
    iso.send(1);
  }
}

Usage

Initialize

Define a function to be run in an isolate:

void run(IsoRunner iso) {
   // do something here
}

Important: this must be a top level function or a static method. The function can be async if needed

Initialize a runner:

final iso = Iso(run);

Launch the function in the isolate:

iso.run();
// to terminate it:
iso.dispose();

The function can be run with parameters:

final params = <dynamic>["arg1", "arg2", 3];
iso.run(params);

To grab the parameters in the isolate:

void run(IsoRunner iso) {
   if (iso.hasArgs) {
     final List<dynamic> args = iso.args;
   }
}

Communication channels

Data coming from the isolate

Handle data coming from the isolate using a handler function:

void onDataOut(dynamic data) => print("Data coming from isolate: $data");

final iso = Iso(run, onDataOut: onDataOut);

Another option to handle this data is to listen to a channel:

iso.dataOut.listen((dynamic payload) {
  if (payload == <String, dynamic>{"status": "finished"}) {
    print("Isolate declares it has finished");
    iso.kill();
  }
});

Data coming into the isolate

By default this data channel is not activated: you need to do it in the run function if needed:

void run(IsoRunner iso) {
  iso.receive();
  iso.dataIn.listen((dynamic data) {
    // do something with the data
  });
}

or:

void run(IsoRunner iso) {
  iso.receive()
    ..listen((dynamic data) =>
      print("Data received in isolate -> $data / ${data.runtimeType}"));
}

Send data to the isolate

This has to be initialized in the isolate before sending as explained above.

iso.run();
// wait for the isolate to be ready to receive data
await iso.onCanReceive;
// send data
iso.send("Some data");

Send data from the isolate to the main thread

void run(IsoRunner iso) {
   // ...
   iso.send("Some data");
}

Examples

Check the example folder to see examples for Dart and Flutter

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.