ChannelSend
ChannelSend[channel,msg]
往指定信道发送指定消息 msg.
更多信息和选项
- 在 ChannelSend[channel,…] 中,可以用信道对象或在 ChannelObject 中使用的任何形式来指定 channel.
- 消息 msg 可以是任何表达式.
- 采用缺省设置 $AllowExternalChannelFunctions=False 时, ChannelSend[channel,…] 只能用于认证过的信道和你所拥有的信道.
- 除了裸露的字符串(按原样发送)外,所有消息在通过信道代理服务器传输之前,都在内部序列化到 WXF.
- 将来可能发布的任何不是基于 Wolfram 语言的信道代理客户端都可能仅支持字符串消息. 因此,如果希望使程序的消息与这些客户端向前兼容,建议使用与语言无关的字符串格式对其进行编码,例如 JSON 或 XML.
- ChannelSend 仅拦阻到消息发送到代理为止. 它不等待代理确认收到消息.
范例
打开所有单元 关闭所有单元基本范例 (1)
CreateChannel["example"];
listener = ChannelListen["example"]ChannelSend["example", "message"]可从监听器处按为 ChannelListener 对象指定的格式获取消息:
listener["Message"]DeleteChannel["example"];范围 (2)
CreateChannel["example"];
ChannelSend["example", <|"a" -> 1|>]ChannelSend["example", "a" -> 1]ChannelSend["example", {"a" -> 1, "b" -> 2}]ChannelSend["example", Unevaluated[Speak["hello"]]]ChannelSend["example", NotebookGet[InputNotebook[]]]DeleteChannel["example"];创建一个信道,以传输编码为 JSON 字符串的数据:
CreateChannel["json"]listener = ChannelListen["json"]mydata = <|
"string" -> "hello world",
"integer" -> 42,
"real" -> 1.21,
"list" -> {"one", 2, 3.4},
"association" -> <|"key" -> "value"|>
|>;
ChannelSend["json", ExportString[mydata, "RawJSON"]]listener["Message"]ImportString[%, "RawJSON"]DeleteChannel["json"];应用 (1)
CreateChannel["nb"];
listener = ChannelListen["nb", CreateWindow[ReleaseHold[#Message]]&]nb = DocumentNotebook[{TextCell["My Notebook", "Title"], ExpressionCell[x ^ 2, "Input"]}]ChannelSend["nb", nb]DeleteChannel["nb"];属性和关系 (2)
可以用 ChannelListen 创建的监听器接收 ChannelSend 发送的消息:
CreateChannel["example"];
listener = ChannelListen["example"]DeleteChannel["example"];为了安全起见,ChannelSend 发送的消息可能以未经运算的形式由信道监听器保留,具体取决于其内容.
CreateChannel["example"];
listener = ChannelListen["example"];
Scan[ChannelSend["example", #]&, {123, myFunction[1]}]将 myFunction 的调用封装在 HoldComplete 中读取:
listener["Message", All]DeleteChannel["example"];可能存在的问题 (1)
由于 ChannelSend 异步返回,因此发送到信道的消息将无法从连接到该信道的监听器立即获得:
channel = CreateChannel["x"];
listener = ChannelListen[channel];ChannelSend[channel, "hello"];
listener["Message"]ChannelSend[channel, "world"];
Pause[0.1];
listener["Message"]也可使用 While 循环在监听器提供消息之前进行等待:
receivedQ = False;
listener2 = ChannelListen[channel, (receivedQ = True)&];
ChannelSend[channel, "world"];
While[!receivedQ, Pause[.001]];
listener2["Message"]DeleteChannel[channel];文本
Wolfram Research (2016),ChannelSend,Wolfram 语言函数,https://reference.wolfram.com/language/ref/ChannelSend.html (更新于 2020 年).
CMS
Wolfram 语言. 2016. "ChannelSend." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2020. https://reference.wolfram.com/language/ref/ChannelSend.html.
APA
Wolfram 语言. (2016). ChannelSend. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/ChannelSend.html 年
BibTeX
@misc{reference.wolfram_2026_channelsend, author="Wolfram Research", title="{ChannelSend}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/ChannelSend.html}", note=[Accessed: 17-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_channelsend, organization={Wolfram Research}, title={ChannelSend}, year={2020}, url={https://reference.wolfram.com/language/ref/ChannelSend.html}, note=[Accessed: 17-August-2026]}