国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HarmonyOS實戰:一招解決等待多個并發結果

尤楓 ? 來源:jf_54996641 ? 作者:jf_54996641 ? 2025-06-09 14:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

年前公司與華為簽訂了合作備忘錄,加入了鴻蒙生態這個大家庭。。公司想趕著鴻蒙純血系統上市之前,發布自己的鴻蒙軟件。開發鴻蒙NEXT版本軟件就變成了今年的一個工作重心。

** 本文主要講解開發過程中遇到的并發問題,官方API 11文檔寫的太簡單了,根本沒有解決方案,小編也是苦思冥想,絞盡腦汁才找到解決方案。需要開發鴻蒙的小伙伴可以仔細閱讀,避免踩坑。**

問題

在開發清除緩存的功能時,鴻蒙NEXT提供的文檔中說明,應用緩存文件有四個,需要清除指定的四個緩存文件夾。如圖所示:

清除緩存代碼如下:

import fs from '@ohos.file.fs'
          
    fs.access("文件路徑").then((isHas:boolean) = > {
      if(isHas) { //判斷文件是否存在
        fs.rmdirSync("文件路徑")//刪除文件
       
      }
    })

需要同時清除這四個文件夾,然后再計算這四個文件夾的大小。由于fs.access 方法是耗時操作。所以只能在異步線程中執行。

解決方案

一般思路

鴻蒙官方文檔API 11 提供了使用Promise和async/await處理異步并發問題。

注意是單次I/O任務,可問題是我們需要解決同時并發問題,一次拿到四次清除緩存結果再去統計緩存大小。這個時候可能有的小伙伴就會說,那就先清除第一個,等一個結果返回再清除第二個,以此類推。也能解決問題。如下圖所示:

fs.access("文件路徑1").then((isHas:boolean) = > {
      if(isHas) { //判斷文件是否存在
        fs.rmdirSync("文件路徑1")//刪除文件
               
       fs.access("文件路徑2").then((isHas:boolean) = > {
         if(isHas) { //判斷文件是否存在
           fs.rmdirSync("文件路徑2")//刪除文件
             .....................
        }
    })
      }
    })

但是這樣就會帶來兩個問題:多層嵌套與代碼混亂。在Flutter中這個問題非常好解決。這里就不詳細描述了。

優雅方案

使用Promise.all 解決。小編在官方文檔中并沒有找到Promise.all 相關說明,可能是鴻蒙還沒注意到這種需求場景吧。直接上代碼。

  1. 先將文件清除包裝成一個異步任務。
asyncClear(dir: string): Promise< void > {
    return new Promise((resolve, reject) = > {
      fs.access(dir).then((isHas: boolean) = > {
        if (isHas) {
          fs.rmdir(dir)
        }
        resolve()
      })
    })
  }
  1. 將四個緩存文件夾對應的任務放在一個數組中。
let promises = [
      this.asyncClear("文件夾1"),
      this.asyncClear("文件夾2"),
      this.asyncClear("文件夾3"),
      this.asyncClear("文件夾4")
    ]
  1. 將任務數組放進Promis.all中,等待四個任務執行結束。
Promise.all(promises).then(() = > {
      // 結束回調
    })
  1. 在結束回調中 再去調用計算緩存大小的方法。
storageStatistics.getCurrentBundleStats().then((bundleStats) = > {
        let cacheSizeNum = bundleStats.cacheSize
        let unit = "KB"
        if (cacheSizeNum > 1024) {
          cacheSizeNum = Math.floor(cacheSizeNum) / 1024
          unit = "KB"
        }
        if (cacheSizeNum > 1024) {
          cacheSizeNum = Math.floor(cacheSizeNum) / 1024
          unit = "MB"
        }
        if (cacheSizeNum > 1024) {
          cacheSizeNum = Math.floor(cacheSizeNum) / 1024
          unit = "GB"
        }
        if (cacheSizeNum > 1024) {
          cacheSizeNum = Math.floor(cacheSizeNum) / 1024
          unit = "TB"
        }
        let chacheSizeString = "" + Math.floor(cacheSizeNum) + unit
      });

總結

鴻蒙NEXT的API還不算完善,需要每個開發者的參與,發現問題,提出問題,鴻蒙開發人員才能更好的解決問題。如果您也是鴻蒙開發者,有其他更好的解決方案,歡迎評論區交流 ,互相學習,互相成長!

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 鴻蒙
    +關注

    關注

    60

    文章

    2963

    瀏覽量

    45883
  • HarmonyOS
    +關注

    關注

    80

    文章

    2153

    瀏覽量

    36041
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Go 語言高并發服務設計與性能調優實戰:從萬級到百萬級并發的演進之路

    10W+ 連接 性能滿意度 開發者滿意度 89% 微服務采用率 云原生項目中占比 67% 本文將從 并發模型 、 性能優化 、 資源管理 、監控調優四個維度,分享套經過多個并發
    發表于 02-18 19:19

    如何在單個圖表上繪制多個測量結果曲線

    用戶常常希望對批設備進行測量,并將結果顯示在同個圖表上以便比較。APx序列(Sequence)的設計是每次僅顯示個設備的結果。如果您的
    的頭像 發表于 02-11 09:02 ?113次閱讀
    如何在單個圖表上繪制<b class='flag-5'>多個</b>測量<b class='flag-5'>結果</b>曲線

    文說透了如何實現單片機的多任務并發!

    多任務并發。 、任務調度 任務調度是多任務并發個非常重要的概念。它指的是如何在系統中組織和規劃多個任務的順序和時間。任務調度的目的是使
    發表于 01-06 06:46

    智能樓宇改造避坑指南:別再換掉所有老設備!一招搞定ETHERNET/IP轉DEVICENET的共存難題

    智能樓宇改造避坑指南:別再換掉所有老設備!一招搞定ETHERNET/IP轉DEVICENET的共存難題 1. 項目背景:老舊樓宇的智能化挑戰 在現代智能樓宇控制系統中,我們常面臨新舊設備混合的復雜
    的頭像 發表于 12-17 15:35 ?242次閱讀
    智能樓宇改造避坑指南:別再換掉所有老設備!<b class='flag-5'>一招</b>搞定ETHERNET/IP轉DEVICENET的共存難題

    Swift 的并發系統并行運行多個任務

    ??前言 Swift 內置并發系統的好處之是它可以更輕松地并行執行多個異步任務,這反過來又可以使我們顯著加快可以分解為單獨部分的操作。 在本文中,讓我們看下幾種不同的方法,以及這些
    的頭像 發表于 11-11 11:33 ?438次閱讀

    別再卡分頁!淘寶全量商品接口實戰開發指南:從并發優化到數據完整性閉環

    淘寶店鋪全量商品接口實戰指南:詳解權限申請、分頁優化、并發拉取與增量更新,結合代碼實現高效穩定的數據獲取,解決超時、限流、數據丟失等核心難題,助力電商數據分析避坑提效。
    的頭像 發表于 09-30 10:47 ?568次閱讀

    AppGallery Connect(HarmonyOS 5及以上) --公開測試創建并發布測試版本(三)

    。手機號碼用于華為審核人員與您溝通審核問題,郵箱用于接收上架審核結果,應用整改或下架通知。 19.配置測試發布。 20.點擊頁面右上角“提交”,將測試版本提交審核。提交成功后,可在“版本列表”頁面查看版本
    發表于 09-29 17:38

    AppGallery Connect(HarmonyOS 5及以上) --公開測試創建并發布測試版本(

    )的公開測試版本會自動下架。 發布測試版本 首先,您需創建并發布測試版本。最多支持1個公開測試版本在架, 1.登錄AppGallery Connect,選擇“APP” 2.在應用列表頁
    發表于 09-26 17:24

    創建并發布測試版本(

    配置軟件版本。 5.配置測試信息。 測試信息默認繼承全網版本信息或最近個測試版本填寫的信息。如需調整,請在當前測試版本提交前重新審視并修改,測試信息配置不影響全網版本的應用信息。 本文主要從參考引用自HarmonyOS官方文檔
    發表于 09-16 15:21

    工業電路總出問題?檳城BMG10D系列壓敏復合器件:一招解決過壓難題

    ”。工業電路總出問題?檳城BMG10D系列壓敏復合器件:一招解決過壓難題。它從根源上保證了品質——原廠技術支持、穩定供貨,不用擔心中間環節出岔子,買得放心,用得也踏
    的頭像 發表于 09-05 16:58 ?591次閱讀
    工業電路總出問題?檳城BMG10D系列壓敏復合器件:<b class='flag-5'>一招</b>解決過壓難題

    一招解決多地區無感考勤的問題

    在當今集團化和連鎖化經營日益普及的背景下,企業通常會遭遇個管理難題:分散于各地的分公司考勤數據難以統,統計工作滯后且流程繁瑣。傳統的指紋或刷卡考勤方式需要人工核對,這不僅效率低下,還容易出現作弊
    的頭像 發表于 07-04 16:46 ?574次閱讀

    HarmonyOS實戰一招搞定保存圖片到相冊

    保存圖片功能幾乎是每個應用程序必備的功能之,當用戶遇到喜歡的圖片時可以保存到手機相冊。那么在鴻蒙中保存圖片是否也需要申請用戶存儲權限以及如何將圖片保存到相冊,本文將詳細講述怎么保存網絡圖片,指定布局生成圖片保存至相冊的功能實現。
    的頭像 發表于 06-24 17:04 ?1262次閱讀

    鴻蒙5開發寶藏案例分享---應用并發設計

    ?** 鴻蒙并發編程實戰指南:解鎖ArkTS多線程黑科技** 嘿,開發者朋友們! 今天給大家扒扒鴻蒙官方文檔里藏著的并發編程寶藏—— 100+實戰
    發表于 06-12 16:19

    HarmonyOS實戰:組件化項目搭建

    ?本文將詳細講解HarmonyOs組件化項目搭建的全過程,帶領大家實現個組件化項目。 項目創建 首先創建個項目工程,點擊開發工具DevEco-Stdio的****File 選項,選擇 New 然后點擊 Create Proj
    的頭像 發表于 06-09 14:58 ?671次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>實戰</b>:組件化項目搭建

    HarmonyOS5云服務技術分享--ArkTS開發Node環境

    氣的方式探索這個功能,結尾還有實用總結和鼓勵彩蛋哦~? ? 、HarmonyOS云函數開發:核心能力與價值 HarmonyOS的云函數(Serverless)為開發者提供了??無服務器架構??的便捷
    發表于 05-22 17:21