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

汕头市委网站两学一做三一crm手机客户端下载

汕头市委网站两学一做,三一crm手机客户端下载,北京做网站建设的公司哪家好,zimg wordpress在一个类初始化的时候或者方法执行的时候,总有一些值是需要的但是不是立即需要的,并且在需要的时候需要阻塞流程来等待值的计算,这时候异步的形式创建这个值是毋庸置疑最好的选择。 为了更好的创建值需要使用 Kotlin 的协程来创建&#xff0…

在一个类初始化的时候或者方法执行的时候,总有一些值是需要的但是不是立即需要的,并且在需要的时候需要阻塞流程来等待值的计算,这时候异步的形式创建这个值是毋庸置疑最好的选择。

为了更好的创建值需要使用 Kotlin 的协程来创建,因为协程足够轻量。那么要设置这个功能需要几个点

  1. 使用委托方式创建,这样可以和正常的使用计算结果的值一样使用
  2. 使用 kotlin 的协程异步进行创建
  3. 如果需要的时候值还未产生,需要等待结果产生
  4. 结果出现后,需要将值进行缓存,以便多次的方位该值
  5. 如果负责计算值的委托被赋值了新值,需要停止计算并将新值进行缓存
/*** 异步创建一个值,并在使用的时候等待其生产完成* 注意,不能生产空值* 例如:异步创建值,并在需要使用时等待其等待生产完成,如果已经生产完成就直接返回*/
class AsyncValue<T : Any>(dispatcher: CoroutineDispatcher = Dispatchers.Default,private val producer: suspend () -> T
) {private var result: T? = nullprivate var exception: Throwable? = nullprivate var finished = falseprivate val production: Deferred<T?> = async(dispatcher) {return@async invoke().apply {finished = trueresult = this}}private suspend fun invoke(): T? = try {producer()} catch (e: Exception) {exception = enull}operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {if (!finished) production.cancel()result = valuefinished = true}operator fun getValue(thisRef: Any?, property: KProperty<*>): T {exception?.let { throw it }return if (finished) {result ?: throw IllegalStateException("The value for ${property.name} is null")} else {runBlocking { await() }}}/*** 获取值,如果值还没有初始化完成就返回 null,或者出现异常了也返回 null*/fun getOrNull(): T? {return result}/*** 获取值,如果值还没有初始化则抛出异常,如果出现异常了也抛出异常*/fun getOrThrow(): T {exception?.let { throw it }return result ?: throw IllegalStateException("The value is null")}/*** 获取值,如果值不存在则等待初始化,如果出现异常了也抛出异常*/suspend fun getAwaitOrThrow(): T {exception?.let { throw it }return await()}/*** 获取值,如果值不存在则等待初始化,如果出现异常了就返回 null*/suspend fun getAwaitOrNull(): T? {return kotlin.runCatching { await() }.getOrNull()}private suspend fun await(): T {if (!finished) {production.await()}exception?.let { throw it }return result ?: throw IllegalStateException("The value is null")}
}

使用测试

val image: BufferedImage by AsyncValue {ImageIO.read(File("E:\\仓库\\study\\散图\\F0FadEKaEAAm9_m.jpg"))
}
// 其他逻辑
//...
// 使用异步创建的结果
println(image)

该程序例子是不能生产 Null 如果生产结果可能包含 Null 可以使用以下程序。否则直接返回 Null 会抛出异常

val optional: Optional<String> by AsyncValue {Optional.ofNullable(null)
}
http://www.dtcms.com/wzjs/348545.html

相关文章:

  • 净化科技网站建设快手seo软件下载
  • wordpress中页面伪静态seo是网络优化吗
  • 南京 网站开发网络黄页平台网址有哪些
  • 网站关键词优化遇到的情况和解决方法百度网站提交入口
  • 邯郸网络企业版seo课程培训入门
  • java开源企业网站建设系统昆明seo培训
  • 重庆哪家公司做网站好武汉seo关键词排名优化
  • asp.net做网站步骤网络营销的方法有哪些
  • 广州网站设计服务百度今日数据统计
  • 做网站跳转百度手机应用市场
  • 网站建设实训报告建议怎么让网站被百度收录
  • 宁德做网站公司cms系统
  • phpcms做双语网站石家庄网络推广优化
  • 网站可以做多少个关键词seo经验是什么
  • 黑白高端网站建设免费网络推广的方法
  • 网站安全保障机制如何做企业文化标语
  • 微信做网站的弊端广州头条新闻最新
  • 网站运行费用预算常用的网络推广方法有
  • 做兼职一般去哪个网站济南优化网页
  • 什么浏览器可以进黄页zol问答在线seo外链工具
  • 单位网站建设情况总结网站seo标题是什么意思
  • 用h5做简易网站代码怎么开展网络营销推广
  • 教研网站建设方案快速建站哪个平台好
  • 网站设计与建设论文百度竞价关键词价格查询
  • 公司网站名词解释ai智能搜索引擎
  • 外贸公司是干什么的宁波百度推广优化
  • 凡科互动游戏可以作弊码长沙搜索排名优化公司
  • 只做瓶子包装设计的创意网站百度账号登录个人中心
  • 网站建设的目标是什么 提供了哪些栏目网络营销策划的方法
  • wordpress meta_keyseo搜索引擎优化营销案例