哎呀好人,
我遇到了奇怪的行为
当异步使用isolate的顶层函数时;
你可以找到示例代码HERE https://github.com/iapicca/isolates_logging,但简而言之
as 隔离的顶级功能这有效:
String _syncHandle(int data) {
return 'done';
}
这不是:
Future<String> _syncHandle(int data) async {
return 'done';
}
有人能解释一下为什么吗?
(或者如果应该可行,为什么在我的代码中不这样做?)
先感谢您
弗朗西斯科
...
[编辑:刚刚注意到有人问了类似的问题,
尽管如此,仍然没有答案从隔离函数调用异步函数 https://stackoverflow.com/questions/50334869/call-async-function-from-isolate-function%5D,
加上问题开放于github https://github.com/flutter/flutter/issues/30683 ]
忘记更新这个:/
如果您查看问题中链接的代码
isoles_logging/lib/provider/test_isolate.dart
Future<void> _handle(int _m) async {
final response = ReceivePort();
isolateTest = await Isolate.spawn(_isolate, response.sendPort);
final sendPort = await response.first as SendPort;
final answer = ReceivePort();
sendPort.send([_m, answer.sendPort]);
await answer.first.then((p) {
_outbound.sink.add(p);});
}
static void _isolate(SendPort _initialReplyTo) {
final port = ReceivePort();
_initialReplyTo.send(port.sendPort);
port.listen((message) {
final data = message[0] as int;
final send = message[1] as SendPort;
send.send(_syncHandle(data));
});
}
}
Future<String> _syncHandle(int data) async {
return 'done';
}
注意 send.send(_syncHandle(data));部分
如果你这样做,你只能发送原语而不是期货,
基本上就是这样
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)