当前位置: 首页 > news >正文

哪些软件可以做网站设计苏州网络推广苏州网站建设

哪些软件可以做网站设计,苏州网络推广苏州网站建设,wordpress 正在连接,wordpress 标题 外链一、概念 又叫选择表达式,是一个挂起函数,可以同时等待多个挂起结果,只取用最快恢复的那个值(即多种方式获取数据,哪个更快返回结果就用哪个)。 同时到达 select() 会优先选择先写子表达式,想随…

一、概念

        又叫选择表达式,是一个挂起函数,可以同时等待多个挂起结果,只取用最快恢复的那个值(即多种方式获取数据,哪个更快返回结果就用哪个)。

        同时到达 select() 会优先选择先写子表达式,想随机(公平)的话使用 selectUnbiased() 替换 。

        能被选择的都是 SelectClauseN 函数类型。

public suspend inline fun <R> select(crossinline builder: SelectBuilder<R>.() -> Unit): R 

public sealed interface SelectBuilder<in R> {

        public operator fun SelectClause0.invoke(block: suspend () -> R)
        public operator fun <Q> SelectClause1<Q>.invoke(block: suspend (Q) -> R)
        public operator fun <P, Q> SelectClause2<P, Q>.invoke(param: P, block: suspend (Q) -> R)
        public operator fun <P, Q> SelectClause2<P?, Q>.invoke(block: suspend (Q) -> R): Unit = invoke(null, block)
}

SelectClause0对应事件没有返回值。例如 job.onJoin。
SelectClause1对应事件有返回值。例如 deffered.onAwait 和 channel.onReceive。
SelectClause2对应事件有返回值。此外还需要一个额外的参数,例如 Channel.onSend() 有两个参数,第一个是 Channel 数据类型的值表示即将发送的值,第二个是发送成功时的回调函数。

二、使用

在使用 async() 启动协程的返回类型 Deferred 中,定义了 SelectClause1 函数类型的变量 onAwait,其作用和 await() 一样,只是当其在 select() 中作为子语句时,具有“同时等待看谁最先返回”的效果。同理其它。

2.1 复用多个 job.onJoin

fun main() = runBlocking<Unit> {val job1 = launch {delay(100)println("job 1")}val job2 = launch {delay(10)println("job 2")}select {job1.onJoin { println("job 1 更快") }job2.onJoin { println("job 2 更快") }}delay(1000)
}
//打印:
//job 2
//job 2 更快
//job 1

2.2 复用多个 deffered.onAwait

public interface Deferred<out T> : Job {
        public val onAwait: SelectClause1<T>        //等效await()
fun main() = runBlocking {val defferedCache = async {delay(10)"Cache"}val defferedLocal = async {delay(100)"Local"}val defferedRemote = async {delay(1000)"Remote"}val result = select {defferedCache.onAwait { println("最快的是$it") }defferedLocal.onAwait { println("最快的是$it") }defferedRemote.onAwait { println("最快的是$it") }}delay(2000)println(result) //打印:最快的是Cache
}

2.3 复用多个 channel.onReceive

public interface SendChannel<in E> {

        public val onSend: SelectClause2<E, SendChannel<E>>        //等效send()

}

public interface ReceiveChannel<out E> {

        public val onReceive: SelectClause1<E>        //等效receive()

        public suspend fun receiveCatching(): ChannelResult<E>        //等效receiveCatching()

}

//select() 中的 onReceive() 在已经关闭的通道执行会发生失败,并导致相应的 select() 抛出异常,使用 onReceiveCatching() 在关闭通道时执行特定操作。

suspend fun getDataFromLocal() = withContext(Dispatchers.IO) { "Local" }
suspend fun getDataFromRemote() = withContext(Dispatchers.IO) { "Remote" }@OptIn(ExperimentalCoroutinesApi::class)
fun main() = runBlocking {val produceLocal = produce { send(getDataFromLocal()) }val produceRemote = produce { send(getDataFromRemote()) }val result = select {produceLocal.onReceive { it }produceRemote.onReceive { it }}
//    val result = select {
//        produceLocal.onReceiveCatching { it.getOrNull() ?: "Channel已关闭:produceLocal" }
//        produceRemote.onReceiveCatching { it.getOrNull() ?: "Channel已关闭:produceRemote " }
//    }println("结果更快的是:$result")
}
http://www.yayakq.cn/news/920688/

相关文章:

  • 青岛做网站排名微信公众号文章怎么导入wordpress
  • wordpress 企业整站图书购物网站开发的业务分析
  • 网站开发 seo世界500强企业排行榜
  • ai国外教程网站有电脑网站怎样建手机
  • 网站编辑器哪个好集团品牌网站建设
  • 手机欧美视频网站模板下载 迅雷下载 迅雷下载地址网站建设的模板
  • 加强网站的建设工作wordpress wp content
  • 做网站都需要什么工具wordpress忘记了密码
  • 东莞常平做网站公司制作app的专业公司
  • 滴滴优惠券网站怎么做微信开放平台介绍
  • 南通网站建设系统方案wordpress在线编辑慢
  • 如何做网站热力图电商网站建设实验心得
  • 建筑网站翻译编辑做设计常用网站有哪些
  • 网站建设开发招标书建设银行 贷款 查询 网站
  • 企业公司网站管理系统做摄影和后期的兼职网站
  • 域名解析网站打不开网站建设的职称
  • 外国网站英语要求WordPress图片加密
  • 网站用什么开发深圳乐安居网站谁做的
  • 在阿里巴巴网站上怎么做贸易服饰网站建设规划书
  • 如何用源码搭建网站源码宝安中心医院入职体检多少钱
  • 变性人做网站代刷网站推广链接0元价格
  • 自己怎么制作网站学设计多少钱
  • 网站内部链接优化培训心得体会100字
  • 网站数据库有什么用游戏源码
  • 如何做电子书下载网站域名和网站建站公司链接
  • 太原网站运营优化装修公司找哪家比较好
  • dede怎么做视频网站保山专业的网站建设
  • 肃宁做网站价格做哪个软件网站app
  • 做网站毕业答辩会问什么qq人脸解冻自助网站
  • 苏州北京网站建设win8 metro风格网站后台管理模板