spawn<<span class="type-parameter">T>静态方法

Future<<span class="type-parameter">Isolate> spawn<<span class="type-parameter">T>(<
  1. void entryPoint(<
    1. T message
    ),
  2. T message, {<
  3. bool paused = false,
  4. bool errorsAreFatal = true,
  5. SendPort? onExit,
  6. SendPort? onError,
  7. @Since("2.3") String? debugName,
})

创建并启动一个与当前隔离相同代码的隔离。

参数entryPoint指定在启动的隔离中调用的初始函数。entry-point函数使用message作为唯一参数在新隔离中调用。

entryPoint函数必须能够使用单个参数调用,即至少接受一个位置参数且最多只有一个必需位置参数的函数。该函数可以接受任意数量的可选参数,只要它可以使用单个参数调用。如果entryPoint是一个闭包,由于Dart实现中的限制,它可能将意外的状态隐式发送到隔离,这可能导致性能问题、内存使用增加(请参阅http://dartbug.com/36983)或,如果状态包含无法在隔离之间传递的对象,则导致运行时失败。请参阅run示例。

message必须在隔离之间传递。无法传递的对象包括打开的文件和套接字(请参阅SendPort.send以获取详细信息)。通常,初始message包含一个SendPort,以便启动者和子程序可以相互通信。

如果将paused参数设置为true,隔离将启动并暂停,在调用entryPoint函数使用message之前,就像通过初始调用isolate.pause(isolate.pauseCapability)一样。要恢复隔离,请调用isolate.resume(isolate.pauseCapability)

如果提供了errorsAreFatalonExit和/或onError参数,隔离将分别表现得像分别调用带有相应参数的setErrorsFataladdOnExitListeneraddErrorListener一样,并在隔离开始运行之前处理。

如果提供了debugName,则启动的Isolate将可以通过此名称在调试器和日志中识别。

如果省略了 errorsAreFatal,平台可能会选择默认行为或继承当前isolate的行为。

您还可以在返回的isolate上调用 setErrorsFataladdOnExitListeneraddErrorListener 方法,但除非isolate是以 paused 方式启动,否则这些方法可能已经在它们完成之前终止。

返回一个future,如果孵化成功,它将完成一个 Isolate 实例。否则,它将完成一个错误。

可以预期isolate的基本内存开销约为30 kb。

实现

external static Future<Isolate> spawn<T>(
    void entryPoint(T message), T message,
    {bool paused = false,
    bool errorsAreFatal = true,
    SendPort? onExit,
    SendPort? onError,
    @Since("2.3") String? debugName});