一尘不染

飞镖/颤振:隔离的顶级功能的异步行为

flutter

是的,好的人,我的行为很怪异

异步使用隔离的顶级功能时;

您可以在此处找到示例代码,但总之

作为 隔离的顶级功能, 它的工作原理是:

String _syncHandle(int data) {
  return 'done';
}

这不是:

Future<String> _syncHandle(int data) async {
  return 'done';
}

谁能解释我为什么?

(或者如果应该工作,为什么在我的代码中不这样做?)

先感谢您

弗朗切斯科

[编辑:刚注意到有人问过类似的问题,

尽管如此,它仍然无法解决 从隔离功能调用异步功能

加上在github上打开的问题]


阅读 210

收藏
2020-08-13

共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)); 部分

如果这样做,则只能发送基元,而不能发送期货,基本上就是这样

2020-08-13