send 抽象方法

void send(
  1. Object? message
)

通过此发送端口异步 message,发送到其对应的 ReceivePort

如果发送和接收的isolate不共享相同的代码(使用 Isolate.spawnUri 创建的isolate不共享其父isolate的代码),则message的传递对象图只能包含以下类型的对象

如果发送者和接收者的isolate共享相同的代码(例如,通过 Isolate.spawn 创建的isolate),则message的传递对象图可以包含任何对象,但有以下例外

@pragma('vm:isolate-unsendable') 标记的类、扩展或实现此类类的实例无法通过端口发送。

除了这些例外,任何对象都可以发送。被识别为不可变的对象(例如字符串)将被共享,而所有其他对象将被复制。

发送是立即发生的,可能具有复制传递对象图的线性时间成本。发送本身不阻塞(即不等待接收者接收到消息)。对应的接收端口可以在其isolate的事件循环准备好传递消息时接收消息,而不考虑发送者isolate正在进行什么操作。

注意:由于Dart VM在如何表示捕获的闭包状态方面的实现选择,闭包目前可以捕获比所需更多的状态,这可能导致传递闭包比所需更大。有关此问题的bug,请查阅:http://dartbug.com/36983

实现

void send(Object? message);