如何从隔离中得到简单的答案?
How to get simple answer from isolate?
我正在学习 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
将存储 name/address 派生函数,我需要 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
上尝试 运行 ReceivePort.listen
和 ReceivePort.first
,你会得到一个异常。
我正在学习 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
将存储 name/address 派生函数,我需要 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
上尝试 运行 ReceivePort.listen
和 ReceivePort.first
,你会得到一个异常。