我正在重写ImageAnalysys.Analyzer
的analyze()
方法,所以我希望它尽快执行并返回.我有一个我想从analyze()
调用的方法,它将操作一些成员变量,并最终想要通知View
它有新的东西要显示,但它很长.因此,我希望将该方法排入队列以供执行,但立即返回analyze()
.
我使用的是GlobalScope.launch { fireAndForgetMethod() }
,它(显然)按预期工作,但我收到了"微妙的API"警告,帮助弹出窗口表明这不是一个好主意.我已经看到了MainScope().launch {}
次,提到了viewModelScope和lifecycleScope.但后来我看到了像How to: Grpc fire and forget async api call in Kotlin这样的文章,这些文章表明,即使只使用火和遗忘也是不受鼓励的.
我最近了解了javascript的async
、await
和Promise
体系 struct ,所以我对kotlin的suspend
可能会做什么有一个模糊的 idea ,但我认为我需要一个更智能的答案--代码可能seem可以工作,但要狡猾.
-
如果我将
fireAndForgetMethod()
标记为suspend
,并从analyze()
对其进行正常调用,它是否会立即从调用中返回,这是正确的技术吗?我不需要从方法中得到答案. -
如果不是这样,我应该使用什么范围的
launch {}
? -
有没有其他(批准的)方法可以在不阻塞
analyze()
的情况下执行较长的操作?(Long方法comes从analyze()
开始所需的数据,所以不知何故这就是我需要触发它的地方).如果是一个工作线程,并在线程中设置一个标志来说‘Go!’,那该怎么办?