如何解决Task<T>.await() 主安全吗?
我正在编写我的第一个 Kotlin 应用程序,并且正在使用 Firebase 服务进行身份验证、数据库和存储。由于不可能进行原子 Firestore + Storage 操作,我发现自己正在退出一个简单的图像上传的回调地狱(带有错误回退和所有)。因此 - 我决定重构我的应用程序以使用协程。我找到了一些示例(如 here 和 here),但我注意到这些示例中的存储库级函数没有像 android docs 中所示那样用 withContext(Dispatchers.IO){ }
包装。他们应该吗?我想这是两个问题合二为一:
- 是否应始终使用 IO 调度程序调用 Firebase 操作?
-
kotlinx-coroutines-play-services
的Task<T>.await()
主安全吗?
还有一个额外的问题:我将所有 Firebase 调用包装在一个用于解耦的代理对象中 - 有没有办法将对象(/类)的所有函数设置为在相同的上下文中运行,或者我是否必须将每个函数都包装起来与 withContext(Dispatchers.IO){ }
分开使用?
非常感谢!
解决方法
- 是否应始终使用 IO 调度程序调用 Firebase 操作?
除非 API 文档中另有说明,否则所有 Firebase API 都是异步的,旨在从主线程安全调用。
- kotlinx-coroutines-play-services 的 Task.await() 主安全吗?
是的。正如 API documentation 所述(强调我的):
等待任务完成不阻塞线程。
这是一个 suspend fun
,它们不会阻塞。但是,在协程之外调用它们实际上没有意义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。