【问题标题】:Facing issue in using multiple isolates from main thread从主线程使用多个隔离时面临的问题
【发布时间】:2021-08-31 05:02:56
【问题描述】:

我正在从主线程生成一个隔离(第一个隔离)以对后端进行网络调用以获取大量数据并将它们处理到本地数据库中。

在此过程中,当我从同一个主线程生成另一个隔离(第二个隔离)以执行另一个任务时。当任务完成后,当第二个隔离通过 SendPort 向主线程发送数据时,它会停止第一个隔离执行的任务。有什么帮助吗?

这是否与接收端口有关,因为两个隔离都是从主线程产生的,并且两者都有一个到主线程的端口来共享内存,关闭任何端口是否会导致其他端口也被关闭?

【问题讨论】:

  • "关闭任何端口是否会导致其他端口也被关闭?" - 否
  • @pskink 关于为什么其他隔离停止的任何原因?
  • @pskink 无法查看页面

标签: flutter dart dart-isolates


【解决方案1】:

您可以使用多个指向同一个主接收端口的隔离,但每个隔离都需要有自己的接收端口。例如:

隔离 1 接收端口 -> 主接收端口

但是您应该注意如何在主线程上接收和保存隔离端口。因为它们需要使用 Main ReceivePort 发送。

我建议您查看插件 easy_isolate,它提供了一种简单的方法来处理多个隔离,并提供详细解释的文档。

https://pub.dev/packages/easy_isolate

【讨论】:

  • 我对每个隔离物都有单独的接收端口
  • _isolate = await Isolate.spawn(checkOutBoxAndSendToServer, map); _receivePort.listen((message) { log("MESSAGE FROM ISOLATE : ${message.toString()}"); if(message.toString()=="stopOutbox"){ _receivePort.close(); } },onDone : (){ log("DONE"); this.stop(); });
  • void stop(){ _isolate!.kill(); _isolate = null;}
  • 任务完成后,我将作为 stopOutbox 从isolate 发送一条消息,并且在接收它时在主线程上关闭接收端口
  • _isolate = await Isolate.spawn(checkAndDownloadMessages, map);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多