我可能会对Isolate和Future有错误的想法,请帮我清理一下.以下是我对两个科目的理解.
隔离:在自己的事件循环中隔离运行代码,并且每个事件可以在嵌套的微任务队列中运行较小的任务.
未来:未来用于表示将来某个时间可用的潜在价值或错误.
我的困惑是:
文档说Isolate有它自己的循环?我觉得拥有自己的事件队列对我来说更有意义,我错了吗?
未来是否会在主Isolate上异步运行?我假设未来的任务实际上被放置在事件队列的末尾,所以如果它将来会循环执行.如我错了请纠正我.
为什么在有未来的时候使用Isolate?我看到一些使用Isolate的例子用于一些繁重的任务,而不是Future.但为什么?当将来在主隔离队列上异步执行时,它才对我有意义.
谢谢大家,感谢您的回复.
我知道 Future 将在事件队列中运行。但是事件队列也在主隔离上运行,如果我将来执行一些繁重的任务(例如,计算从 1 到 1000000 的总和),它将阻塞我的 ui 代码。 \n但是 Future 在网络操作不会阻塞UI(如await httpClient.getUrl(uri))。\n为什么使用future的网络请求需要几秒钟而不阻塞UI,而计算操作会阻塞UI\xef\xbc\x9f
\n\n@override\nvoid initState() {\nsuper.initState();\nFuture((){\n var result;\n for (var i = 0; i < 1000000; ++i) {\n result = 'result is $i';\n }\n print(result);\n});\nRun Code Online (Sandbox Code Playgroud)\n\n}
\n\n如果我在 initState() 中使用 Future 执行一些繁重的任务,用户界面将被阻止。
\n