|
|
1
0
你想要
您可以在视图模型范围内的新协同程序中启动它们。缺少的是
只需更换
现在来谈谈手头的问题,2号操作应该在哪里进行。您的想法是启动另一个协同程序,这样您就可以立即返回操作#1的结果。虽然这是可能的,但我想质疑你为什么要这么做。是的,在让视图模型继续使用已经可用的结果之前,等待操作#2完成似乎是在浪费时间。但话说回来,视图模型已经需要等待相当长的时间(才能完成通过互联网的网络访问)。然而,再加上本地文件系统上数据库访问造成的延迟,不会产生任何可测量的差异,因为它将比互联网访问快得多。我的建议是在HTTP请求完成后将令牌同步存储在数据库中 然后 返回到视图模型。这是一个简单的解决方案。 然而,如果您真的、真的想返回到视图模型,并且数据库访问在后台异步运行,那么您需要启动一个新的协同程序。这本身并不是坏事,事实上 structured concurrency (协同工作背后的原则)就是关于。你不应该害怕协同出游被取消:取消协同出游是合作的。您的数据库访问不会因为其运行的协同程序作用域被取消而中断。不过,如果你在协同程序中进行了长时间的操作,你应该积极检查协同程序是否被取消,以满足该请求并终止你的操作。在你的情况下,你不想那样,所以不要这样做。:) 另一件事是,无论如何,视图模型的范围都不会那么容易被取消。例如,它将在触发重新创建活动的配置更改中幸存下来-另一方面,视图模型及其范围不会受到它的影响 view model's lifecycle 了解更多详细信息。
现在,要启动一个新的协同程序,首先需要一个协同程序范围。这个
但这对你没有帮助。虽然
相反,您需要另一个范围。该范围应作为参数传递给您的函数:
视图模型中的函数调用现在需要提供作用域。这个
说到这里,我想重申:只需使用简单的解决方案,并完全跳过协同程序。不过,请记住切换到IO调度器。网络访问和数据库访问应该始终在该调度器上完成。 |
|
Murilo · Jetpack编写导航栏项目图标 1 年前 |
|
|
KolaYAndr · 活动RESULT_OK似乎从未发生过 1 年前 |
|
psycho_pat · Android应用程序中的权限 1 年前 |
|
|
FarazFiroz · 如何将argb转换为描述性文本颜色 1 年前 |
|
Daniel · Unity Android游戏支持的设备数量太少 1 年前 |