send抽象方法

void send(
  1. Object? message
)

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

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

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

具有@pragma('vm:isolate-unsendable')标记的类的实例,或者扩展或实现这些类的实例不能通过端口发送。

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

发送立即发生,复制传递对象图可能具有线性时间成本。发送本身不会阻塞(即不会等待接收者接收到消息)。相应的接收端口可以在其隔离区的事件循环准备好交付消息时接收消息,而不管发送隔离区正在做什么。

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

实现

void send(Object? message);