spawn static method
Create a new Isolate, as by Isolate.spawn and wrap that.
The returned IsolateRunner forwards operations to the new isolate,
and keeps a port open in the new isolate that receives commands
from the IsolateRunner. Remember to close the IsolateRunner when
it's no longer needed.
The created isolate is set to have errors not be fatal.
Implementation
static Future<IsolateRunner> spawn() async {
var channel = SingleResponseChannel();
var isolate =
await Isolate.spawn(IsolateRunnerRemote._create, channel.port);
// The runner can be used to run multiple independent functions.
// An accidentally uncaught error shouldn't ruin it for everybody else.
isolate.setErrorsFatal(false);
var pingChannel = SingleResponseChannel();
isolate.ping(pingChannel.port);
var commandPort = await channel.result as SendPort;
var result = IsolateRunner(isolate, commandPort);
// Guarantees that setErrorsFatal has completed.
await pingChannel.result;
return result;
}