Flutter Isolate的单向通信和双向通信

897 阅读1分钟

单向通信

import 'dart:isolate';

main(List<String> args) async {
  print('main start');
  //1.创建管道
  ReceivePort response = ReceivePort();
  //2.创建Isolate
  Isolate isolate = await Isolate.spawn<SendPort>(fun, response.sendPort);
  //3.监听管道
  response.listen((message) {
    print('Isolate 返回: $message');
    response.close();
    isolate.kill();
  });
  print('main end');
}

void fun(SendPort send) async {
  send.send('isolate返回消息');
}

双向通信

import 'dart:isolate';

main(List<String> args) async {
  //1.创建管道
  ReceivePort response = ReceivePort();
  //2.创建Isolate
  Isolate isolate = await Isolate.spawn<SendPort>(fun, response.sendPort);
  SendPort newIsolateSendPort = await response.first as SendPort;
  ReceivePort request = ReceivePort();
  newIsolateSendPort.send(["This is a request message!", request.sendPort]);
  String responseMessage = await request.first;
  print('kafka response message: $responseMessage');
}

void fun(SendPort send) async {
  ReceivePort newIsolateReceivePort = ReceivePort();
  send.send(newIsolateReceivePort.sendPort);
  final message = await newIsolateReceivePort.first as List;
  final data = message[0] as String;
  final request = message[1] as SendPort;
  request.send('This is a response message!');
  print('kafka request message: $data');
}