我需要在我的应用程序上返回一个Future,因为我认为我的功能需要太多时间才能完成。
所以我得到了两个可能的答案:使用Completer或Isolate。
什么会让我选择一个或另一个?我能把一个完成者放在任何我想要的地方,并相信这将工作正常吗?
这是如何工作的?就像.. Flutter必须在屏幕上以60fps的速度绘制,对吗?所以,它会在画布上绘制之后和下一个绘图之前计算这些东西?我很好奇,因为Flutter不是多线程的(但似乎隔离可以做到这一点)..所以我很困惑,不知道如何编写值得信赖的代码。
还有,有没有理由不使用完成程序?比如,我认为我的代码花费了太多时间,但也许不是..有没有理由检查完成所需的时间,如果它低于阈值,我就不应该使用它?
先谢谢你了。
3条答案
按热度按时间h79rfbju1#
这篇文章帮助我很好地理解了这个异步的东西:https://www.didierboelens.com/2019/01/futures---isolates---event-loop/
除了用代码来解释之外,我认为结论回答了我的问题:
因此,这里有一些提示,你应该在你的发展中系统地考虑:
如果代码段不能被中断,则使用正常的同步进程(一个方法或多个相互调用的方法);
如果代码片段可以独立运行而不影响应用程序的流畅性,请考虑通过使用Futures来使用事件循环;
如果繁重的处理可能需要一些时间才能完成,并且可能会影响应用程序的流动性,请考虑使用Isolates。
uxh89sit2#
返回一个Future(Completer)可以确保你的long函数的activity将与你的原始线程在同一个线程中。一个Isolate会自动在一个不同的无共享线程中,它有自己的事件循环,并且必须使用消息传递来访问或返回值。
6qfn3psc3#
Completer
的用途是从尚未完成的future中获取值,而Isolate
用于在单独的隔离中执行代码,而不与其他隔离共享内存。Completer
本身并不确保并发性,而Isolate
通过在单独的隔离中运行代码来确保并发性。1.不同分离株之间的通信需要在分离株之间传递消息,而完成者与其相关联的未来分离株之间的通信发生在同一分离株内。