扩展库实际上是对这些更底层API的封装,
Continucation<T>类型的参数,Continuation这个单词翻译成中文就是续体,它的声明如下:
interface Continuation<in T> {
val context : CoroutineContext
fun resumeWith(result: Result<T>)
}
线程的调用存在阻塞和运行两种状态之间的开销,线程状态的切换开销是一个较大的优化点,
协程本质上可以认为是运行在线程上的代码块, 协程提供的挂起操作会使协程暂停执行, 而不会导致线程阻塞。
通道基础 :
一个Channel是一个和BlockingQueue , 和队列不同,一个通道可以被关闭来表明没有更多的元素将会进入通道,
构建通道生产者
val job = launch {
repeat(1000) {i->
println();
delay(500L);
}
}
父协程的职责
一个父协程总是等待所有的子协程执行结束,
val request = launch {
repeat(3) {
launch {
println();
}
}
}
Dispatchers.Unconfined
某些协程库的实现使用了任务分发, 于是可以在协程函数中
CoroutineScope实例来管理协程的生命周期,
suspend fun <T> retryIO(block: suspend() -> T): T{
var currDelay = 1000L;
while(true) {
try{
return block();
}catch(e: IOException) {
当一个任务出现了