Index: lib/isolate/isolate_api.dart |
diff --git a/corelib/src/isolate.dart b/lib/isolate/isolate_api.dart |
similarity index 78% |
rename from corelib/src/isolate.dart |
rename to lib/isolate/isolate_api.dart |
index 09c3ab047ff0234c4fd3fe9688ff867cdf4e2418..8cc85e71f0e9f2bb4d8fdb1c64db7e830f30b27b 100644 |
--- a/corelib/src/isolate.dart |
+++ b/lib/isolate/isolate_api.dart |
@@ -2,9 +2,6 @@ |
// 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. |
-// Dart core library. |
-// TODO(sigmund): move to dart:isolate |
- |
/** |
* [SendPort]s are created from [ReceivePort]s. Any message sent through |
* a [SendPort] is delivered to its respective [ReceivePort]. There might be |
@@ -55,7 +52,7 @@ interface SendPort extends Hashable { |
* |
* A [ReceivePort] may have many [SendPort]s. |
*/ |
-interface ReceivePort default ReceivePortFactory { |
+interface ReceivePort default _ReceivePortFactory { |
/** |
* Opens a long-lived port for receiving messages. The returned port |
@@ -147,7 +144,7 @@ class Isolate { |
* [:myIsolate.spawn().then((SendPort port) { port.send('hi there'); });:] |
*/ |
Future<SendPort> spawn() { |
- return IsolateNatives.spawn(this, _isLight); |
+ return _IsolateNatives.spawn(this, _isLight); |
} |
// The private run method is invoked with the receive port. Before |
@@ -180,3 +177,39 @@ class Isolate { |
final bool _isLight; |
ReceivePort _port; |
} |
+ |
+/** |
+ * [Isolate2] provides APIs to spawn, communicate, and stop an isolate. An |
+ * isolate can be spawned by simply creating a new instance of [Isolate2]. The |
+ * [Isolate2] instance exposes a port to communicate with the isolate and |
+ * methods to control its behavior remotely. |
+ */ |
+ // TODO(sigmund): rename to Isolate once we delete the old implementation |
+interface Isolate2 default _IsolateFactory { |
+ |
+ /** |
+ * Create and spawn an isolate that shares the same code as the current |
+ * isolate, but that starts from [topLevelFunction]. The [topLevelFunction] |
+ * argument must be a static method closure that takes exactly one |
+ * argument of type [ReceivePort]. It is illegal to pass a function closure |
+ * that captures values in scope. |
+ * |
+ * When an child isolate is spawned, a new [ReceivePort] is created for it. |
+ * This port is passed to [topLevelFunction]. A [SendPort] derived from |
+ * such port is sent to the spawner isolate, which is accessible in |
+ * [Isolate2.sendPort] field of this instance. |
+ */ |
+ Isolate2.fromCode(Function topLevelFunction); |
+ |
+ /** |
+ * Create and spawn an isolate whose code is available at [uri]. |
+ * The code in [uri] must have an method called [: isolateMain :], which takes |
+ * exactly one argument of type [ReceivePort]. |
+ * Like with [Isolate2.fromCode], a [ReceivePort] is created in the child |
+ * isolate, and a [SendPort] to it is stored in [Isolate2.sendPort]. |
+ */ |
+ Isolate2.fromUri(String uri); |
+ |
+ /** Port used to communicate with this isolate. */ |
+ SendPort sendPort; |
+} |