Tolriq
06/06/2019, 10:22 AMclass XXX : CoroutineScope {
override val coroutineContext = <http://Dispatchers.IO|Dispatchers.IO> + SupervisorJob()
val aDispatcher = ThreadPoolExecutor(...).asCoroutineDispatcher()
internal val tasks = Channel<Task>(UNLIMITED)
fun startWorkers() {
repeat(150) {
launch(aDispatcher) {
val initialTask = try {
tasks.receive()
} catch (e: Exception) {
return@launch
}
withContext(<http://Dispatchers.IO|Dispatchers.IO>) {
// Correctly run on <http://Dispatchers.IO|Dispatchers.IO>
}
}
}
}
}
class XXX : CoroutineScope {
override val coroutineContext = <http://Dispatchers.IO|Dispatchers.IO> + SupervisorJob()
val aDispatcher = ThreadPoolExecutor(...).asCoroutineDispatcher()
internal val tasks = Channel<Task>(UNLIMITED)
fun startWorkers() {
repeat(150) {
launch(aDispatcher) {
val initialTask = try {
tasks.receive()
} catch (e: Exception) {
return@launch
}
withContext(coroutineContext) {
// Incorrectly runs on aDispatcher instead of <http://Dispatchers.IO|Dispatchers.IO> that is used for coroutineContext
}
}
}
}
}
bezrukov
06/06/2019, 10:35 AMcoroutineContext
is a context from launch(aDispatcher) scope. coroutineContext
you wanna use is this@XXX.coroutineContextTolriq
06/06/2019, 10:52 AM