spawn<<span class="type-parameter">T>静态方法
创建并启动一个与当前隔离相同代码的隔离。
参数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)
。
如果提供了errorsAreFatal
、onExit
和/或onError
参数,隔离将分别表现得像分别调用带有相应参数的setErrorsFatal、addOnExitListener和addErrorListener一样,并在隔离开始运行之前处理。
如果提供了debugName
,则启动的Isolate将可以通过此名称在调试器和日志中识别。
如果省略了 errorsAreFatal
,平台可能会选择默认行为或继承当前isolate的行为。
您还可以在返回的isolate上调用 setErrorsFatal、addOnExitListener 和 addErrorListener 方法,但除非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});