Я думал, что эти две строки будут эквивалентны в плане выполнения:
val context1 = Executors.newFixedThreadPool(2).asCoroutineDispatcher()
val context2 = newFixedThreadPoolContext(2, "Fixed")
Но когда я использую "context2" в приведенном ниже коде, он работает как положено, но "context1" действует как один поток.
val context1 = Executors.newFixedThreadPool(2).asCoroutineDispatcher()
repeat(4) {
launch {
withContext(context1) {
Thread.sleep(2000)
}
}
}
context1.close()
Ожидается : 2 потока будут выполняться параллельно.Код должен завершиться за 4 секунды, потому что 2 потока спят в течение 2 секунд, а затем повторяются.
Actual : выполняется только один поток, и "repeat" выполняется последовательно, что занимает 8секунд до завершения.
Это ошибка?
Или что подразумевается под этой документацией здесь ?
Если вам нужен совершенно отдельный пул потоков с политикой планирования, основанной на стандартном JDKexecutors, используйте следующее выражение: Executors.newFixedThreadPool (). asCoroutineDispatcher ().