Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Task.await()main是否安全?_Android_Firebase_Kotlin_Kotlin Coroutines - Fatal编程技术网

Android Task.await()main是否安全?

Android Task.await()main是否安全?,android,firebase,kotlin,kotlin-coroutines,Android,Firebase,Kotlin,Kotlin Coroutines,我正在编写我的第一个Kotlin应用程序,并使用firebase服务进行身份验证、数据库和存储。由于不可能进行原子Firestore+存储操作,我发现自己陷入了一个回调地狱,只需上传一个简单的图像,并伴有错误回退等等。因此,我决定重构我的应用程序以使用协同程序。我发现了一些类似和的示例,但我注意到这些示例中的存储库级函数没有像中所示那样使用withContextDispatchers.IO{}包装。应该吗?我想这是两个问题合一: Firebase操作是否应始终通过IO调度程序调用? kotlin

我正在编写我的第一个Kotlin应用程序,并使用firebase服务进行身份验证、数据库和存储。由于不可能进行原子Firestore+存储操作,我发现自己陷入了一个回调地狱,只需上传一个简单的图像,并伴有错误回退等等。因此,我决定重构我的应用程序以使用协同程序。我发现了一些类似和的示例,但我注意到这些示例中的存储库级函数没有像中所示那样使用withContextDispatchers.IO{}包装。应该吗?我想这是两个问题合一:

Firebase操作是否应始终通过IO调度程序调用? kotlinx协同程序是否是游戏服务的任务。等待主保险箱? 还有一个额外的问题:我将所有Firebase调用封装在一个代理对象中以进行解耦-有没有办法将对象/类的所有函数设置为在相同的上下文中运行,还是必须分别使用withContextDispatchers.IO{}封装每个函数

非常感谢

Firebase操作是否应始终通过IO调度程序调用? 除非API文档中另有说明,否则所有Firebase API都是异步的,设计为从主线程安全调用

kotlinx协同程序是否是游戏服务的任务。等待主保险箱? 对。正如各州强调的那样:

等待任务完成而不阻塞线程

这是一个有趣的暂停,他们不会阻止。然而,在协同程序之外调用它们并没有真正的意义

Firebase操作是否应始终通过IO调度程序调用? 除非API文档中另有说明,否则所有Firebase API都是异步的,设计为从主线程安全调用

kotlinx协同程序是否是游戏服务的任务。等待主保险箱? 对。正如各州强调的那样:

等待任务完成而不阻塞线程


这是一个有趣的暂停,他们不会阻止。但是,在协同程序之外调用它们并没有真正意义。

按照惯例,所有挂起函数都是主要安全的。可以编写一个不是的函数,但如果这些等待函数不是,则库作者可能会出错。withContext是用来调用非挂起阻塞函数的。所以我想说,按照同样的约定,我必须将所有函数都写为main-safe,这是一个很好的实践,对吗?方法是用withContextDispatchers.xxx包装每个函数,还是我误解了它的用法?在协同路由和挂起函数中使用withContext调用不会立即返回且不是挂起函数的阻塞函数,或者在当前不在主调度程序上时调用需要在主线程上调用的函数。按照惯例,挂起函数从不阻塞。您的挂起函数绝对应该都是主安全的。如果您完全致力于使用协程,那么是的,您可能会将自己代码中的任何阻塞函数转换为非阻塞挂起函数,因此它们将是主要安全的。我想我现在将把所有存储库函数转换为挂起函数。有没有一种方法可以为对象的所有函数设置上下文?按照惯例,所有挂起函数都是主要安全的。可以编写一个不是的函数,但如果这些等待函数不是,则库作者可能会出错。withContext是用来调用非挂起阻塞函数的。所以我想说,按照同样的约定,我必须将所有函数都写为main-safe,这是一个很好的实践,对吗?方法是用withContextDispatchers.xxx包装每个函数,还是我误解了它的用法?在协同路由和挂起函数中使用withContext调用不会立即返回且不是挂起函数的阻塞函数,或者在当前不在主调度程序上时调用需要在主线程上调用的函数。按照惯例,挂起函数从不阻塞。您的挂起函数绝对应该都是主安全的。如果您完全致力于使用协程,那么是的,您可能会将自己代码中的任何阻塞函数转换为非阻塞挂起函数,因此它们将是主要安全的。我想我现在将把所有存储库函数转换为挂起函数。有没有一种方法可以为一个对象的所有函数设置一个上下文?那么运行这些操作的调度器是否重要呢?这算不上网络电话?为什么重要?如果您有问题,请参阅每个调用的API文档以了解其需求。我无法想象你会有问题,除非有一些文档表明不是这样。它不算网络呼叫?我想这里你是在暗示一个谬论,即所有网络调用都必须在IO调度程序中完成。实际上,所有阻塞网络呼叫或其他呼叫都必须在与主IO不同的调度器上完成,这并不是严格意义上的r
如果需要,那么挂起乐趣要么是非阻塞的,要么是有严重的bug,使得它阻塞了调用线程。您可以放心地假设公共库中的所有suspend FUN都是兼容的。在堆栈溢出时,通常会使用答案左侧的按钮将有用的答案向上投票并标记为正确答案。因此,使用哪个调度程序运行这些操作是否重要?这算不上网络电话?为什么重要?如果您有问题,请参阅每个调用的API文档以了解其需求。我无法想象你会有问题,除非有一些文档表明不是这样。它不算网络呼叫?我想这里你是在暗示一个谬论,即所有网络调用都必须在IO调度程序中完成。实际上,所有阻塞网络调用或其他调用都必须在与主IO不同的调度器上完成,这并不是严格要求的,挂起乐趣要么是非阻塞的,要么是有一个严重的错误,使得它阻塞了调用线程。您可以放心地假设公共库中的所有suspend FUN都是兼容的。在堆栈溢出时,通常会使用答案左侧的按钮向上投票并将有用的答案标记为正确。