gpt4 book ai didi

dart - 如何从隔离中获得简单答案?

转载 作者:行者123 更新时间:2023-12-03 04:00:48 24 4
gpt4 key购买 nike

我正在学习 Isolate 。我读了文档。并想写最少的工作示例。这是我的代码:

main() async
{

ReceivePort receivePort = ReceivePort();
Isolate.spawn(echo, receivePort.sendPort);

var sendPort = await receivePort.first;

}


echo(SendPort sendPort)
{
ReceivePort receivePort = ReceivePort();
sendPort.send(receivePort);
}

几乎可以,但是我不明白如何发送回简单的“Hello”消息。我看了几个例子,中间有一些像 sendReceive()这样的中间件。我对:
var sendPort = await receivePort.first;
sendPort将存储派生函数的名称/地址,我需要 sendPort.send("hello");吗?

最佳答案

您已经说明了如何使用 SendPort.send 发送简单数据。实际上,只有能够发送原始数据类型,即文档中所述的null, num, bool, double, String
我将在下面完成您的示例。

import 'dart:isolate';

main() async {
final receivePort = ReceivePort();
await Isolate.spawn(echo, receivePort.sendPort);

final Stream receivePortStream = receivePort.asBroadcastStream();

receivePortStream.listen((message) {
if (message is String) {
print('Message from listener: $message');
} else if (message is num) {
print('Computation result: $message');
}
});

final firstMessage = await receivePortStream.first;
print(firstMessage);
}

echo(SendPort sendPort) {
sendPort.send('hello');

sendPort.send('another one');

final computationResult = 27 * 939;
sendPort.send(computationResult);
}

请注意,您只想发送 'hello'而不是其他一些 ReceivePort,因为它不是原始值,因此甚至无法正常工作。
在我的示例中,我还设置了另一个侦听器,该侦听器将处理更多消息。

另外,我需要将 receivePortStream变量创建为广播流,以便能够同时收听 来获取第一条消息。如果您尝试在相同的 ReceivePort.listen上运行 ReceivePort.firstReceivePort,则会出现异常。

关于dart - 如何从隔离中获得简单答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56991920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com