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

做网站要用什么服务器吗厦门seo怎么做

做网站要用什么服务器吗,厦门seo怎么做,施工企业工程施工科目,广州市研发网站建设价格在实际开发中,我们经常遇到这样的场景。 需要立即初始化但计算成本高昂的值 val expensiveValue calculateExpensiveValue() 可能引发阻塞的初始化操作 val resource loadResourceFromNetwork()这些场景通常需要满足以下需求: 异步加载&#xff1a…

在实际开发中,我们经常遇到这样的场景。

  • 需要立即初始化但计算成本高昂的值
val expensiveValue = calculateExpensiveValue() 
  • 可能引发阻塞的初始化操作
val resource = loadResourceFromNetwork()

这些场景通常需要满足以下需求:

  1. 异步加载:避免阻塞主线流程
  2. 惰性计算:按需获取结果
  3. 结果缓存:多次访问时直接返回
  4. 状态同步:支持阻塞等待和异步等待
  5. 动态更新:允许主动设置最终值

异步计算值

通过 Kotlin 协程的 async/await 模型实现异步计算能力。AsyncValue 在初始化时立即通过 CoroutineScope.async 启动后台计算任务,并通过 Deferred.await() 实现挂起等待:

var finished = false
var result: T? = null
var exception: Throwable? = null
private var production: Deferred<T?> = CoroutineScope(dispatcher).async {runCatching { producer() }.onFailure { exception = it }.onSuccess { result = result ?: it }.getOrNull()
}

关键实现细节:

  1. 协程调度:使用 Dispatchers.IO 作为默认调度器,适用于 IO 密集型任务
  2. 原子操作:通过 runCatching 统一处理异常,确保结果状态一致性
  3. 结果缓存:计算完成后将结果存储在 result 字段中,后续访问直接返回
  4. 异常传递:异常信息会保留在 exception 字段中,等待消费时抛出

委托方式返回和设置值

通过实现 getValue/setValue 操作符函数,提供属性委托访问能力:

operator fun getValue(thisRef: Any?, property: KProperty<*>): T {val result = runBlocking { await() }if (result == null && exception != null) throw exception!!if (result == null) throw NullPointerException("The value[$property] produced is null")return result
}/**
* 获取值,如果值还未生产完成,则挂起协程等待
*/
suspend fun await(): T? = result ?: production.await().apply {if (exception != null) throw exception!!
}

特性说明:

  1. 阻塞等待:在普通上下文访问时,通过 runBlocking 阻塞当前线程等待结果
  2. 异常传播:保留原始异常堆栈信息,便于调试定位
  3. 空值防护:禁止返回 null 值,强制显式处理空值情况

动态更新能力:

operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {runCatching { production.cancel() }result = value
}

更新流程:

  1. 取消正在进行的异步计算
  2. 直接设置最终值
  3. 后续访问将返回新值

使用示例:

class ImageLoader {var currentImage: BufferedImage by AsyncValue {ImageIO.read(File("big_image.png")) // 耗时加载}// 动态切换图片fun changeImage(newImage: BufferedImage) {currentImage = newImage}// 允许产生空值val optional: Optional<String> by AsyncValue {Optional.ofNullable(null)}
}

完整代码

class AsyncValue<T>(dispatcher: CoroutineDispatcher = Dispatchers.IO,private val producer: suspend () -> T,
) {/*** 非委托下可以访问* 是否已经生产完成*/var finished = falseprivate set/*** 非委托下可以访问* 产生的值,如果值还未生产完成、异常报错、产生Null,则返回null*/var result: T? = nullprivate set/*** 非委托下可以访问* 产生的异常,如果异常未产生、未异常报错则返回null*/var exception: Throwable? = nullprivate setprivate var production: Deferred<T?> = CoroutineScope(dispatcher).async {runCatching { producer() }.onFailure { exception = it }.onSuccess { result = result ?: it }.getOrNull().apply { finished = true }}/*** 获取值,如果值还未生产完成,则挂起协程等待*/operator fun getValue(thisRef: Any?, property: KProperty<*>): T {val result = runBlocking { await() }if (result == null && exception != null) throw exception!!if (result == null) throw NullPointerException("The value[$property] produced is null")return result}operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {runCatching { production.cancel() }result = value}/*** 获取值,如果值还未生产完成,则挂起协程等待*/suspend fun await(): T? = result ?: production.await().apply {if (exception != null) throw exception!!}
}

典型应用场景

资源预加载

val font by AsyncValue {// 耗时字体加载Font.createFont(Font.TRUETYPE_FONT, File("big_font.ttf"))
}

网络请求聚合

class WeatherService {var weatherData by AsyncValue {apiService.fetchWeather() // 网络请求}fun showWeather() {// 页面显示时自动触发异步加载val data = weatherData updateUI(data)}
}

计算缓存优化

object DataProcessor {private val processedData by AsyncValue {heavyComputation().also { saveToCache(it) // 自动缓存计算结果}}fun getData() = processedData
}
http://www.dtcms.com/wzjs/17651.html

相关文章:

  • 展示型网站建设流程方案网络设计
  • 海派虫网站推广软件百度推广代理开户
  • 大于二高端网站建设专业的网站优化公司排名
  • 建站系统做的网站百度可以搜索到吗手机推广app
  • 如何给自己的网站做优化百度搜索量怎么查
  • 广州建设网站怎么做惠州市seo广告优化营销工具
  • 效果图在线搜索优化软件
  • 计算机毕设做网站杭州排名优化软件
  • 云南旅游攻略6天5晚多少钱哈尔滨seo服务
  • 同一个域名两个网站网络舆情管控
  • 哪个网站可以做社工试题搜索引擎seo优化平台
  • 北京的网站开发公司怎么样在百度上免费推广
  • 电脑配件电子商务网站设计方案无锡网站关键词推广
  • 买源码的网站今日军事新闻头条
  • wordpress paypal插件北京首页关键词优化
  • 网站建设douyanet爱站网seo
  • 模板网站建设一条龙专业seo优化推广
  • 微课网站开发莆田百度快照优化
  • 网站劫持是怎么做的网页设计软件有哪些
  • phpcms 视频网站模板百度指数有什么作用
  • 公司网站模块制作百度视频
  • 免费网站app哪个最好竞价排名机制
  • 舜江建设集团官方网站seo是做什么工作内容
  • 三乡网站开发搜索引擎营销的内容和层次有哪些
  • 室内设计方案图重庆seo网站管理
  • 怎么做产品的网站关键词优化报价怎么样
  • 网站制作结构旺道营销软件
  • 优化疫情防控举措优化大师win10
  • wordpress调用当前分类描述优化推广网站推荐
  • 重庆响应式网站建设公司淘宝直通车推广怎么做