Я пытаюсь использовать область с сопрограммами kotlin и делать запросы в новом потоке, используя withContext ()
Что я наблюдаю, так это то, что потоки переключаются в цикле создание бросков областиэто исключение: Доступ к области из неверного потока.Доступ к объектам области возможен только в том потоке, в котором они были созданы.
withContext(Dispatchers.IO) {
val realm = Realm.getDefaultInstance()
val images = mutableListOf<String>("id1", "id2", ...)
for (imageId in images) {
println("THREAD : ${Thread.currentThread().name}")
val image = realm.where<Image>().equalTo("imageId", imageId).findFirst()
delay(1000) // Can lead to an actual switching to another thread
}
realm.close()
}
Как указано в документации dispatchers.IO: https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-dispatchers/-i-o.html
"Этот диспетчер разделяетпотоки с диспетчером [Default] [Dispatchers.Default], поэтому использование * withContext(Dispatchers.IO) { ... }
не приводит к фактическому переключению на другой поток; * обычно выполнение продолжается в том же потоке. "
Я непонять, почему нити переключаются в цикле.Как правильно управлять экземпляром области с сопрограммой?