An isolated Dart execution context.
All Dart code runs in an isolate, and code can access classes and values
only from the same isolate. Different isolates can communicate by sending
values through ports (see
ReceivePort
,
SendPort
).
An
Isolate
object is a reference to an isolate, usually different from
the current isolate.
It represents, and can be used to control, the other isolate.
When spawning a new isolate, the spawning isolate receives an
Isolate
object representing the new isolate when the spawn operation succeeds.
Isolates run code in its own event loop, and each event may run smaller tasks
in a nested microtask queue.
An
Isolate
object allows other isolates to control the event loop
of the isolate that it represents, and to inspect the isolate,
for example by pausing the isolate or by getting events when the isolate
has an uncaught error.
The
controlPort
identifies and gives access to controlling the isolate,
and the
pauseCapability
and
terminateCapability
guard access
to some control operations.
For example, calling
pause
on an
Isolate
object created without a
pauseCapability
, has no effect.
The
Isolate
object provided by a spawn operation will have the
control port and capabilities needed to control the isolate.
New isolate objects can be created without some of these capabilities
if necessary, using the
Isolate.new
constructor.
An
Isolate
object cannot be sent over a
SendPort
, but the control port
and capabilities can be sent, and can be used to create a new functioning
Isolate
object in the receiving port's isolate.
Static Properties
-
current
→
Isolate
-
An
Isolate
object representing the current isolate.
no setter
-
packageConfig
→
Future
<
Uri
?
>
-
The location of the package configuration file of the current isolate.
no setter
-
packageConfigSync
→
Uri
?
-
The location of the package configuration file of the current isolate.
no setter
Static Methods
-
exit
(
[
SendPort
?
finalMessagePort
,
Object
?
message
]
)
→ Never
-
Terminates the current isolate synchronously.
-
resolvePackageUri
(
Uri
packageUri
)
→
Future
<
Uri
?
>
-
Resolves a
package:
URI to its actual location.
-
resolvePackageUriSync
(
Uri
packageUri
)
→
Uri
?
-
Resolves a
package:
URI to its actual location.
-
run
<
R
>
(
FutureOr
<
R
>
computation
(),
{
String
?
debugName
}
)
→
Future
<
R
>
-
Runs
computation
in a new isolate and returns the result.
-
spawn
<
T
>
(
void
entryPoint
(
T
message
),
T
message
,
{
bool
paused
=
false
,
bool
errorsAreFatal
=
true
,
SendPort
?
onExit
,
SendPort
?
onError
,
String
?
debugName
}
)
→
Future
<
Isolate
>
-
Creates and spawns an isolate that shares the same code as the current
isolate.
-
spawnUri
(
Uri
uri
,
List
<
String
>
args
,
dynamic
message
,
{
bool
paused
=
false
,
SendPort
?
onExit
,
SendPort
?
onError
,
bool
errorsAreFatal
=
true
,
bool
?
checked
,
Map
<
String
,
String
>
?
environment
,
Uri
?
packageRoot
,
Uri
?
packageConfig
,
bool
automaticPackageResolution
=
false
,
String
?
debugName
}
)
→
Future
<
Isolate
>
-
Creates and spawns an isolate that runs the code from the library with
the specified URI.
Constants
-
beforeNextEvent
→ const
int
-
Argument to
ping
and
kill
: Ask for action before the next event.
-
immediate
→ const
int
-
Argument to
ping
and
kill
: Ask for immediate action.