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 使用过程遇到的问题

flutter 单线程异步 及 isolate 使用过程遇到的问题

Dart 异步编程之 Isolate 和事件循环

Flutter异步编程详解

Flutter 之多线程