我可能对孤立和future 有错误的 idea .请帮我把它弄清楚.以下是我对这两个科目的理解.

隔离:Isolates在其自己的事件循环中运行代码,并且每个事件可以在嵌套的微任务队列中运行较小的任务.

将来:将来用来表示将来某个时候可能出现的值或错误.

我的困惑是:

  1. doctor 说隔离有它自己的循环?我觉得拥有自己的事件队列对我来说更有意义,我错了吗?

  2. 将来是否在主隔离上异步运行?我假设将来的任务实际上被放在事件队列的末尾,所以它将来是否会被循环执行.如果我说错了,请纠正我.

  3. 如果有future ,为什么要使用隔离呢?我看到了一些使用Isolate代替Future来完成一些繁重任务的例子.但是为什么呢?只有当将来在主隔离队列上异步执行时,它才对我有意义.

推荐答案

Future是一个句柄,允许您在异步执行完成时收到通知. 异步执行使用事件队列,并且代码在同一线程内并发执行.

https://webdev.dartlang.org/articles/performance/event-loop个个

默认情况下,DART代码在根隔离中执行.

您可以启动通常在另一个线程上运行的其他隔离. 可以从根隔离开始时使用的相同DART代码(入口点与main() https://api.dartlang.org/stable/2.0.0/dart-isolate/Isolate/spawn.html不同)加载隔离,也可以使用不同的DART代码(从某个DART文件或URL https://api.dartlang.org/stable/2.0.0/dart-isolate/Isolate/spawnUri.html加载)加载隔离.

隔离不共享任何状态,只能使用消息传递(SendPort/ReceivePort)进行通信.每个隔离都有自己的事件队列.

https://webdev.dartlang.org/articles/performance/event-loop个个

Flutter相关问答推荐

为什么小部件会在其父文件中重建,但放在单独文件中时却不会重建?

我遇到了一个问题,从showDialogue()调用Navigator.pop()两次导致屏幕空白

Flutter:如何从Bottom Navigator中删除此内容

如何在Firebase项目中更改包名称和包ID

IsScrollable为True时如何删除Flutter 选项卡栏左侧填充

try 使用fl_Chart of Ffltter,但在导入它时遇到以下错误:Error:';TextScaler';is;t a type

Ffmpeg_kit_fltter:^6.0.3版权问题

在创建显示此错误的Flutter 深度链接时

Riverpod Provider.family 和 HookConsumerWidget 不刷新 UI

当 Dart SDK 版本范围不匹配时,为什么依赖解析器不会抛出错误?

如何在 VS Code 中启用 Flutter 运行/调试工具栏?

无法将Null类型的值分配给 const 构造函数中List类型的参数

Flutter Bloc 使用 Cubit 监听流和emits 状态

如何显示从 MariaDB 获取的数据到列表视图

Flutter HLS .m3u8 视频无法实时播放

如何验证非表单字段?

使用 onPressed 切换到另一个屏幕无法正常工作

在flutter web中重新加载页面时保留一些状态数据的有效方法是什么?

无法列出 com.facebook.android:facebook-login -Facebook 登录问题的版本

如何从 MemoryFileSystem 字节创建假 dart:io 文件?