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

透明主题wordpress郑州seo外包平台

透明主题wordpress,郑州seo外包平台,东莞常平嘉盛学校,西安网站建设托管TaskPool方法不会阻塞UI,如果做上传图片的功能加载Loading记得使用TaskPool,Promise、Async/Await都会阻塞UI 【引言】 发现Promise可能会阻塞UI,尝试使用async或await,但发现它们仍然会导致阻塞。后来看到chaoxiaoshu回复的Tas…

TaskPool方法不会阻塞UI,如果做上传图片的功能加载Loading记得使用TaskPool,Promise、Async/Await都会阻塞UI

【引言】 

发现Promise可能会阻塞UI,尝试使用async或await,但发现它们仍然会导致阻塞。后来看到chaoxiaoshu回复的TaskPool方法,发现使用该方法后UI不再阻塞。因此,我特意编写了一个加载弹窗进行测试,结果同样显示,只有TaskPool方法不会阻塞UI。

【代码示例】

import { taskpool } from '@kit.ArkTS';@Component
export struct MyDialog_1 {@Prop dialogID: string@State title: string = '加载中...'build() {Stack() {Column() {LoadingProgress().color(Color.White).width(100).height(100)Text(this.title).fontSize(18).fontColor(0xffffff).margin({ top: 8 }).visibility(this.title ? Visibility.Visible : Visibility.None)}}.onClick(() => {getContext(this).eventHub.emit(this.dialogID, "关闭弹窗")}).width(180).height(180).backgroundColor(0x88000000).borderRadius(10).shadow({radius: 10,color: Color.Gray,offsetX: 3,offsetY: 3})}
}@Entry
@Component
struct Page28 {@State time3: string = ""@State isShowLoading: boolean = falsebuild() {Stack() {Column({ space: 20 }) {Button("【方案一】测试Promise").type(ButtonType.Capsule).onClick(() => {this.isShowLoading = truethis.time3 = 'loading...'console.log("start call promise")testPromise(100000000).then((time) => {this.time3 = `耗时:${time}`console.log("promise then")this.isShowLoading = false})console.log("end call promise")})Button("【方案二】测试async await").type(ButtonType.Capsule).onClick(() => {this.isShowLoading = truethis.time3 = 'loading...'console.log("start call promise")this.testPromise()console.log("end call promise")})Button("【方案三】测试taskpool").type(ButtonType.Capsule).onClick(() => {this.isShowLoading = truethis.time3 = 'loading...'let task: taskpool.Task = new taskpool.Task(concurrentFunc, 100000000);taskpool.execute(task);task.onReceiveData((time: number) => {this.time3 = `耗时:${time}`;console.log("====end")this.isShowLoading = false})})Text(this.time3)}.alignItems(HorizontalAlign.Start)MyDialog_1().visibility(this.isShowLoading ? Visibility.Visible : Visibility.None)}.width('100%').height('100%')}//耗时操作async testPromise() {let time = await testPromise(100000000)time = new Date().getTime() - timethis.time3 = `耗时:${time}毫秒`console.log("promise then")this.isShowLoading = false}
}function testPromise(count: number): Promise<number> {return new Promise<number>((resolve) => {let time = Date.now().valueOf()let num = 0for (let i = 0; i < count; i++) {+num}time = Date.now().valueOf() - timeresolve(time)})
}@Concurrent
function concurrentFunc(count: number): void {let time = Date.now().valueOf()let num = 0for (let i = 0; i < count; i++) {+num}time = Date.now().valueOf() - timetaskpool.Task.sendData(time);
}

【方案一:Promise】

优点:

易于理解:Promise的语法简单,易于理解和使用。

链式调用:可以通过.then进行链式调用,处理多个异步操作。

缺点:

阻塞UI:在执行耗时任务时,Promise会阻塞UI线程,导致Loading弹窗不能及时显示。

【方案二:Async/Await】

优点:

同步写法:Async/Await 使异步代码看起来像同步代码,更加直观。

错误处理:可以使用try/catch块处理错误,使代码更加清晰。

缺点:

阻塞UI:与Promise类似,Async/Await在执行耗时任务时仍会阻塞UI线程,导致Loading弹窗不能及时显示。

【方案三:TaskPool】

优点:

真正的异步:TaskPool可以将耗时任务放到独立的线程中执行,不会阻塞UI线程,保证了UI的流畅性。

数据通信:通过task.onReceiveData可以方便地接收任务结果。

缺点:

复杂度增加:引入了多线程处理,增加了代码的复杂度和维护成本。

【使用注意事项】

任务复杂度:

如果任务较为简单且不会长时间阻塞UI,可以考虑使用Promise或Async/Await。

如果任务较为复杂且耗时较长,建议使用TaskPool以保证UI的流畅性(例如,上传图片时显示加载中)。

代码可读性:

Promise和Async/Await的语法较为简单,适合初学者使用。

TaskPool需要对多线程有一定了解,适合有经验的开发者。

性能考虑:

TaskPool在处理大量或耗时任务时表现更优,可以显著提升应用性能。

Promise和Async/Await在小任务场景下更简洁高效。

【总结】

选择合适的异步操作方案至关重要。Promise和Async/Await适合处理简单的异步任务,而TaskPool则在处理复杂耗时任务时表现出色。根据实际需求,选择最适合的方案,能有效提升开发效率和用户体验。希望本文对您在异步操作的选择和使用上有所帮助。

http://www.wangmingla.cn/news/74433.html

相关文章:

  • dw网站的滑屏怎么做电商培训机构哪家好
  • 商城网站 html模板1688精品货源网站入口
  • 网站美工培训上海网站排名优化怎么做
  • 怎么做购物网站的分类目录百度搜索关键词
  • 金融网站源码 aspseo的优点有哪些
  • 买服务器做网站主机引流推广广告怎么写
  • 深圳龙岗今日新闻头条上海专业seo排名优化
  • wap织梦手机网站小网站广告投放
  • php网站怎么建设优化公司组织架构
  • 做任务赚钱的网站代码广告软文代理平台
  • 实验楼编程网站杭州seo招聘
  • wordpress 首页 文章图片广州seo工程师
  • 网页设计师考证试题武汉seo人才
  • seo自带 网站建设如何写市场调研报告
  • app网站的电话是什么seo排名优化课程
  • ppt做的比较好的网站有哪些贵阳百度seo点击软件
  • 新手学做网站这本书济南网站优化
  • wordpress twenty fourteen主题做的演示网站百度账号安全中心官网
  • 网站建设定制网站建设公司哪家好搜索最多的关键词的排名
  • 百度一直不收录网站潍坊网站模板建站
  • 上海网站建设自学模板网站建站哪家好
  • 网站开发工作流程软文营销成功案例
  • 德令哈网站建设公司百度seo关键词
  • 网站刷新新前台是什么意思公司建官网要多少钱
  • 别的网站可以做弹幕培训学校管理系统
  • 河南建筑市场一体化平台百度seo在线优化
  • 比较好的网站开发公司电话济南seo网站排名优化工具
  • 寿光网站建设会计培训班的费用是多少
  • 论坛类网站开发报价成都高端企业网站建设
  • 魏县做网站的关于软文营销的案例