flutter的isolate线程的通信是用起来好烦了,所以就自己改造下,效果如果:
import 'package:wuchuheng_isolate_channel/src/service/task/index.dart';
import 'package:wuchuheng_isolate_channel/wuchuheng_isolate_channel.dart';
import 'package:wuchuheng_logger/wuchuheng_logger.dart';
void main() async {
/// Isolate logic code.
final Task task = await IsolateTask((message, channel) {
Logger.info('isolate: receive $message');
channel.send('task data');
channel.onClose((name) => Logger.info('Channel is closed. channel: $name.'));
});
///Main thread code.
final channel = task.createChannel(name: 'channelName')
..listen((message, channel) => Logger.info('Receiving isolate messages')).cancel();
channel.send('Send data to isolate');
await Future.delayed(Duration(seconds: 1));
///Turn off the channel
channel.close();
}
它就是把线程的通信抽象成一个双向和管道,而这个管道可以监听数据,也可以关闭,也能监听关闭事件。 其实可以把isolate看成是一个服务端,而主线程侧是客户端,不过个客户端可以根据自己需求自己创建要多少就多少, 而服务端则是收到客户端的数据后,处理成功,就返回,而收到数据也是发送数据的客户端。这样理解就好很多了。这样就简单许多了。
代码库在这里; 好用就点个赞,不好用,请批评指正,太晚了,睡觉。