Index: sdk/lib/isolate/isolate.dart |
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart |
index 8caccdb4e0ac56198ceae436b91e2e68350d3211..cb58a44ede5c2270340cb5e2de04703b93c83caf 100644 |
--- a/sdk/lib/isolate/isolate.dart |
+++ b/sdk/lib/isolate/isolate.dart |
@@ -7,9 +7,9 @@ |
* independent workers that are similar to threads |
* but don't share memory, |
* communicating only via messages. |
- * |
+ * |
* To use this library in your code: |
- * |
+ * |
* import 'dart:isolate'; |
*/ |
library dart.isolate; |
@@ -162,19 +162,27 @@ class Isolate { |
* Creates and spawns an isolate that shares the same code as the current |
* isolate. |
* |
- * The argument [entryPoint] specifies the entry point of the spawned |
- * isolate. It must be a top-level function or a static method that |
- * takes one argument - that is, one-parameter functions that can be |
- * compile-time constant function values. |
- * It is not allowed to pass the value of function expressions or an instance |
- * method extracted from an object. |
+ * The argument [entryPoint] specifies the initial function to call |
+ * in the spawned isolate. |
+ * The entry-point function is invoked in the new isolate with [message] |
+ * as the only argument. |
+ * |
+ * The function must be a top-level function or a static method |
+ * that can be called with a single argument, |
+ * that is, a compile-time constant function value |
+ * which accepts at least one positional parameter |
+ * and has at most one required positional parameter. |
+ * The function may accept any number of optional parameters, |
+ * as long as it *can* be called with just a single argument. |
+ * The function must not be the value of a function expression |
+ * or an instance method tear-off. |
* |
- * The entry-point function is invoked with the initial [message]. |
* Usually the initial [message] contains a [SendPort] so |
* that the spawner and spawnee can communicate with each other. |
* |
* If the [paused] parameter is set to `true`, |
* the isolate will start up in a paused state, |
+ * just before calling the [entryPoint] function with the [message], |
* as if by an initial call of `isolate.pause(isolate.pauseCapability)`. |
* To resume the isolate, call `isolate.resume(isolate.pauseCapability)`. |
* |
@@ -184,19 +192,22 @@ class Isolate { |
* corresponding parameter and was processed before the isolate starts |
* running. |
* |
+ * If [errorsAreFatal] is omitted, the platform may choose a default behavior |
+ * or inherit the current isolate's behavior. |
+ * |
* You can also call the [setErrorsFatal], [addOnExitListener] and |
* [addErrorListener] methods on the returned isolate, but unless the |
* isolate was started as [paused], it may already have terminated |
* before those methods can complete. |
* |
- * Returns a future that will complete with an [Isolate] instance if the |
+ * Returns a future which will complete with an [Isolate] instance if the |
* spawning succeeded. It will complete with an error otherwise. |
*/ |
external static Future<Isolate> spawn(void entryPoint(message), var message, |
- { bool paused: false, |
- bool errorsAreFatal, |
- SendPort onExit, |
- SendPort onError }); |
+ {bool paused: false, |
+ bool errorsAreFatal, |
+ SendPort onExit, |
+ SendPort onError}); |
/** |
* Creates and spawns an isolate that runs the code from the library with |
@@ -291,13 +302,16 @@ class Isolate { |
/** |
* Requests the isolate to pause. |
* |
- * The isolate should stop handling events by pausing its event queue. |
- * The request will eventually make the isolate stop doing anything. |
- * It will be handled before any other messages that are later sent to the |
- * isolate from the current isolate, but no other guarantees are provided. |
+ * When the isolate receives the pause command, it stops |
+ * processing events from the event loop queue. |
+ * It may still add new events to the queue in response to, e.g., timers |
+ * or receive-port messages. When the isolate is resumed, it handles |
+ * the already enqueued events. |
* |
- * The event loop may be paused before previously sent, but not yet exeuted, |
- * messages have been reached. |
+ * The pause request is sent through the isolate's command port, |
+ * which bypasses the receiving isolate's event loop. |
+ * The pause takes effect when it is received, pausing the event loop |
+ * as it is at that time. |
* |
* If [resumeCapability] is provided, it is used to identity the pause, |
* and must be used again to end the pause using [resume]. |
@@ -307,12 +321,12 @@ class Isolate { |
* only one resume with that capability is needed to end the pause. |
* |
* If an isolate is paused using more than one capability, |
- * they must all be individully ended before the isolate resumes. |
+ * each pause must be individually ended before the isolate resumes. |
* |
- * Returns the capability that must be used to resume end the pause. |
+ * Returns the capability that must be used to end the pause. |
*/ |
Capability pause([Capability resumeCapability]) { |
- if (resumeCapability == null) resumeCapability = new Capability(); |
+ resumeCapability ??= new Capability(); |
_pause(resumeCapability); |
return resumeCapability; |
} |
@@ -327,7 +341,7 @@ class Isolate { |
* that was requested using the [resumeCapability]. |
* |
* When all active pause requests have been cancelled, the isolate |
- * will continue handling normal messages. |
+ * will continue processing events and handling normal messages. |
* |
* The capability must be one returned by a call to [pause] on this |
* isolate, otherwise the resume call does nothing. |