Cod*_*Lee 1 android kotlin retrofit2 kotlin-coroutines
\n\n\n运行新的协程并阻塞当前线程,直到\n完成。不应在协程中使用此函数。它旨在将常规阻塞代码桥接到以挂起方式编写的库,以在主函数和测试中使用。
\n
我认为这意味着runBlocking仅阻止当前线程。
但Kotlin Coroutines Deep Dive所写的Marcin Moska\xc5\x82a。
\n书上说
\n\n“使用调度程序,我们可以使 runBlocking 在不同的线程上运行。但是,启动此构建器的线程仍然会被阻塞,直到协程完成为止。”
\n
我理解,即使我将当前线程更改为工作线程(或其他)线程withContext,并在工作线程中运行“runBlocking”,runBlocking仍然会阻止包括主线程在内的所有线程。
因此,我想知道的是runBlocking无论我使用什么方式总是阻塞主线程?
runBlocking只阻塞一个线程,即它被调用的线程。
书中的引用与文档并不矛盾。也许你对这本书所说的内容感到困惑的根源是认为 \xe2\x80\x9cthe coroutine\xe2\x80\x9d 在短语 \xe2\x80\x9cuntil the coroutine is done\xe2\x80\x9d 指的是外部(可耻地)调用的协程runBlocking,实际上指的是runBlocking构建的(不相关的)新协程。
runBlocking首先,您不应该在协程内部使用。在任何情况或条件下都没有这样做的意义。您几乎唯一会使用的两个地方runBlocking是直接在 JVM\xe2\x80\x99smain()函数中或在单元测试中。但您也可能需要它在非挂起回调函数中同步使用协程。
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |