Dart / Flutter:Isolate ***函数的异步行为
Posted
技术标签:
【中文标题】Dart / Flutter:Isolate ***函数的异步行为【英文标题】:Dart / Flutter: async behaviour of an Isolate's top level function 【发布时间】:2019-08-29 11:17:01 【问题描述】:好人好人, 我遇到了一种奇怪的行为
当异步使用隔离的***函数时;
你可以找到示例代码HERE,但总之
作为隔离的***功能,这是可行的:
String _syncHandle(int data)
return 'done';
这不是:
Future<String> _syncHandle(int data) async
return 'done';
谁能解释一下为什么?
(或者如果应该工作,为什么我的代码中没有这样做?)
提前谢谢你
弗朗西斯科
...
[编辑:刚刚注意到有人问了类似的问题,
然而它仍然没有得到答复 Call async function from Isolate function,
在github 上打开另外一个问题]
【问题讨论】:
您好,先生,我和您有同样的问题。你解决了吗? 【参考方案1】:忘记更新了:/ 如果您查看问题中链接的代码
isolates_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));部分
如果你这样做,你只能发送原语而不是期货, 基本上就是这样
【讨论】:
以上是关于Dart / Flutter:Isolate ***函数的异步行为的主要内容,如果未能解决你的问题,请参考以下文章
聊一聊Flutter Engine线程管理与Dart Isolate机制
flutter 单线程异步 及 isolate 使用过程遇到的问题