精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

多線程任務開發范例-TaskPool

開發 前端
任務池(Taskpool)為應用程序提供一個多線程的運行環境,可以使用任務池API創建后臺任務(Task),并對所創建的任務進行如任務執行、任務取消的操作。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

概念介紹

任務池(taskpool)為應用程序提供一個多線程的運行環境,可以使用任務池API創建后臺任務(Task),并對所創建的任務進行如任務執行、任務取消的操作。使用任務池,無需關心線程實例的生命周期,提升開發體驗,還能降低整體資源的消耗、提高系統的整體性能。

API接口

任務池模塊提供的功能非?;A,只支持任務構造,任務執行,任務取消等3類接口。關于任務池(taskpool)API能力詳細信息,請參考@ohos.taskpool。本節只進行關鍵接口解讀。

Task構造函數

使用線程池運行后臺任務前,可以先構造一個Task實例。Task構造函數如下:

constructor(func: Function, …args: unknown[])

其中,參數解釋:

參數名

類型

必填

說明

func

Function

任務執行需要傳入函數,支持的函數返回值類型請查序列化支持類型。

args

unknown[]

任務執行傳入函數的參數,支持的參數類型請查序列化支持類型。默認值為undefined。

我們來看一個構造的示例。

@Concurrent
function printArgs(args) {
    console.log("printArgs: " + args);
    return args;
}

let task = new taskpool.Task(printArgs, "this is my first Task");

注意:上述實例代碼是官方API提供的,實際上并不可用,使用裝飾器@Concurrent會報錯。實際上使用的是如下代碼:

function concurrentTask(durationMs: number) {
  "use concurrent"
  console.info("[concurrentTask] task start, the args is " + durationMs)
  setTimeout(() => {
    console.info("[concurrentTask] task end ")
  }, durationMs)
  console.info("[concurrentTask] task return")
  return '[concurrentTask] returned'
}

function createTask() {
  let task = new taskPool.Task(concurrentTask, 10 * 1000)
  console.info("[createTask] created successfully")
  return task
}

執行異步函數

將待執行的函數放入taskpool內部任務隊列等待,等待分發到工作線程執行。此種方式執行的情況下,沒有創建任務,所以不可取消任務。后文將介紹的taskpool.cancel函數需要傳入taskpool.Task參數。
接口定義如下,其中的參數不再解釋,和Task構造函數的參數一樣。

execute(func: Function, …args: unknown[]): Promise<unknown>

示例代碼如下:

@Concurrent
function printArgs(args) {
    console.log("printArgs: " + args);
    return args;
}

async function taskpoolExecute() {
  let value = await taskpool.execute(printArgs, 100);
  console.log("taskpool result: " + value);
}
...
taskpoolExecute();

執行Task任務

將創建好的任務放入taskpool任務池里等待,等待分發到工作線程執行。當前執行模式可嘗試調用cancel進行任務取消。接口定義如下:

execute(task: Task, priority?: Priority): Promise<unknown>

其中,參數如下:

參數名

類型

必填

說明

task

Task

需要在任務池中執行的任務。

priority

Priority

等待執行的任務的優先級(暫未支持)。

示例代碼如下:

@Concurrent
function printArgs(args) {
    console.log("printArgs: " + args);
    return args;
}

async function taskpoolExecute() {
  let task = new taskpool.Task(printArgs, 100);
  let value = await taskpool.execute(task);
  console.log("taskpool result: " + value);
}

taskpoolExecute();

取消Task任務

取消任務池中的任務。在Task構造實例后直接調用cancal接口會找不到要取消的任務,需要調用execute接口后,才會放入任務池,調用cancel接口才有意義。

接口定義如下:

cancel(task: Task): void

其中,參數如下:

參數名

類型

必填

說明

task

Task

需要取消執行的任務。

示例代碼如下:

@Concurrent
function printArgs(args) {
    console.log("printArgs: " + args);
    return args;
}

async function taskpoolCancel() {
  let task = new taskpool.Task(printArgs, 100);
  taskpool.execute(task);
  try {
    taskpool.cancel(task);
  } catch (e) {
    console.log("taskpool.cancel occur error:" + e);
  }
}

taskpoolCancel();

實現場景

我們主要為了體驗線程池的使用,實現任務創建、任務執行和任務取消的功能。為了簡化,相關輸出使用console控制輸出即可。

設計思路

簡化界面實現,只需要簡單地包含一個text和三個button。text用于展示接口調用信息,不同的button按鈕被點擊后觸發調用不同的接口。通過設置日志查看操作執行情況。

開發步驟

UI界面實現

代碼非常簡單,使用DevEco Studio創建一個Empty Ability空工程后,加3個按鈕就行。

“Create Task"按鈕會創建一個任務。創建的Task實例會賦值給組件的變量,創建任務的代碼如下。現在存在一個問題需要確認,@concurrent裝飾器不知道如何使用,
當前使用的"use concurrent”。需要確認官方文檔是否存在問題。

function concurrentTask(durationMs: number) {
  "use concurrent"
  console.info("[concurrentTask] task start, the args is " + durationMs)
  setTimeout(() => {
    console.info("[concurrentTask] task end ")
  }, durationMs)
  console.info("[concurrentTask] task return")
  return '[concurrentTask] returned'
}

function createTask() {
  let task = new taskPool.Task(concurrentTask, 10 * 1000)
  console.info("[createTask] created successfully")
  return task
}

"Execute Task"按鈕會執行一個任務。組件的變量持有任務,該按鈕可以持續點擊,反復執行任務。

"Cancel Task"按鈕會取消一個任務。如果認為沒有調用execute接口,不在線程池里,取消會阿伯錯;如果任務正在執行中,再去取消也會報錯。實際上運行,沒有得到想要的效果,需要進一步確認。

UI代碼

entry\src\main\ets\pages\Index.ets文件片段如下:

task: taskPool.Task = null
   ...
  Column() {
	Text(this.message)
	  .fontSize(20)
	  .fontWeight(FontWeight.Bold)
	Blank()
	Row() {
	  Button("Create Task").onClick(() => {
		this.task = createTask()
		this.message = "Task Created"
	  })
	  Button("Execute Task").onClick(() => {
		executeTask(this.task)
		this.message = "Task Executed"
	  })
	  Button("Cancel Task").onClick(() => {
		cancelTask(this.task)
		this.message = "Task Cancel involved"
	  })
	}

  }

執行任務代碼實現

我們再執行任務代碼如何實現。

我們從上文知道,taskPool.execute接口有兩種方式,可以傳入異步函數和參數,也可以傳入task實例和優先級參數。

此處,我們使用第二種方法,傳入task實例和優先級參數。任務池模塊尚未支持優先級,該參數也可以省略。

執行任務代碼片段如下:

function executeTask(task: taskPool.Task) {
  console.info("[executeTask] executing")
  try {
    taskPool.execute(task, taskPool.Priority.HIGH).then(() => {
      console.info("[executeTask] executed successfully")
    })
  } catch (e) {
    console.error("[executeTask] execute failed, " + e.toString())
  }
}

取消任務代碼實現

我們再看下取消任務的代碼如何實現。

如果沒有通過調用execute接口,沒有放入任務池的task,執行cancel函數時,會報異常,畢竟在線程池是不存在的。

然后模擬一個延時操作,再去調用cancel函數。

期望可以正常取消任務,實際上,任務沒有被取消,也沒有報異常。這里就很奇怪,需要繼續調查原因。

取消任務代碼片段:

function cancelTask(task: taskPool.Task) {
  console.info("[cancelTask] canceling ")
  try {
    taskPool.execute(task, taskPool.Priority.HIGH)
    let start = new Date().getTime()
    // 延時1s,確保任務已執行
    while (new Date().getTime() - start < 1000) {
      continue
    }
    taskPool.cancel(task)
  } catch (e) {
    console.error("[cancelTask] cancel failed" + e.toString())
  }
}

運行測試效果

代碼編寫完畢,可以測試運行查看效果。推薦在模塊級配置文件entry\build-profile.json5中,修改運行時為"HarmonyOS",這樣就可以在DevEco Studio中使用Simulator模擬器進行運行測試,手頭沒有設備也可以輕松體驗OpenHarmony應用開發。分別點擊按鈕,日志輸出如下:

07-30 22:28:28.357 4214-7232/com.example.taskpooldemo I 0FEFE/JsApp: [createTask] created successfully
07-30 22:28:30.576 4214-7232/com.example.taskpooldemo I 0FEFE/JsApp: [executeTask] executing
07-30 22:28:30.576 4214-7256/com.example.taskpooldemo I 0FEFE/JsApp: [concurrentTask] task start, the args is 10000
07-30 22:28:30.576 4214-7256/com.example.taskpooldemo I 0FEFE/JsApp: [concurrentTask] task return
07-30 22:28:30.577 4214-7232/com.example.taskpooldemo I 0FEFE/JsApp: [executeTask] executed successfully
07-30 22:28:37.602 4214-7232/com.example.taskpooldemo I 0FEFE/JsApp: [cancelTask] canceling
07-30 22:28:37.608 4214-7256/com.example.taskpooldemo I 0FEFE/JsApp: [concurrentTask] task start, the args is 10000
07-30 22:28:37.609 4214-7256/com.example.taskpooldemo I 0FEFE/JsApp: [concurrentTask] task return
07-30 22:28:38.607 4214-7232/com.example.taskpooldemo E 0FEFE/JsApp: [cancelTask] cancel failedBusinessError: The task does not exist when it is canceled, taskpool:: can not find the task
07-30 22:28:40.580 4214-7256/com.example.taskpooldemo I 0FEFE/JsApp: [concurrentTask] task end
07-30 22:28:47.608 4214-7256/com.example.taskpooldemo I 0FEFE/JsApp: [concurrentTask] task end

注意事項

理論上,您可以使用任務池API創建數量不受限制的任務。當同一時間待執行的任務數量大于任務池工作線程數量,任務池會根據負載均衡機制進行擴容,增加工作線程數量,減少整體等待時長。同樣,當執行的任務數量減少,工作線程數量大于執行任務數量,部分工作線程處于空閑狀態,任務池會根據負載均衡機制進行縮容,減少工作線程數量。遺憾的是,負載均衡機制暫未支持。

創建的同一優先級任務的執行順序可以由您決定,任務真實執行的順序與您調用任務池API提供的任務執行接口順序一致。任務默認優先級是taskPool.Priority.MEDIUM。遺憾的是,任務優先級機制暫未支持,可以忽略。

@concurrent裝飾器如何使用,需要繼續確認。另外,官方文檔中提到:僅支持在Stage模型且module的compileMode為esmodule的project中使用taskpool api。compileMode設置為什么看起來并不影響什么,需要進一步確認。

最后,任務池模塊現在屬于基礎版本,接口支持只支持簡單的任務執行和取消功能,查詢運行狀態等接口也不支持。任務一旦執行,不支持取消。不建議您在任務中執行阻塞操作,特別是無限期阻塞操作,長時間的阻塞操作占據工作線程,可能會阻塞其他任務調度,影響您的應用性能。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2023-08-01 16:35:48

鴻蒙ArkUI應用開發

2010-02-04 10:19:39

C++多線程

2021-09-09 07:16:00

C#多線程開發

2011-05-31 13:29:40

Android 多線程

2015-11-18 18:56:36

Java多線程處理

2015-07-22 09:39:38

IOS多線程同步

2015-07-22 09:51:51

iOS開發線程

2009-08-13 09:07:36

Java多線程

2009-07-17 17:29:13

多任務多線程

2019-09-26 10:19:27

設計電腦Java

2022-10-11 08:00:47

多線程開發技巧

2022-04-14 11:44:25

LiteOS線程鴻蒙

2010-03-18 10:36:23

Java語言規范

2015-07-08 09:56:25

Notificatio多線程

2011-08-12 10:09:23

iPhone開發多線程

2011-08-18 17:07:23

IOS開發多線程NSInvocatio

2009-09-22 17:21:24

線程局部變量

2009-03-12 10:52:43

Java線程多線程

2011-08-08 13:50:29

iPhone開發 NSOperatio 多線程

2009-04-24 09:14:20

.NET多線程鎖機制
點贊
收藏

51CTO技術棧公眾號

www.99re7| 潘金莲激情呻吟欲求不满视频| 亚洲欧美丝袜中文综合| 久久综合亚州| 久久综合久久美利坚合众国| 中文字幕乱码一区| 成人全视频免费观看在线看| 亚洲精品国产精品乱码不99| 清纯唯美一区二区三区| av中文字幕第一页| 欧美一级播放| 欧美大片在线看| 成人在线一级片| 香蕉免费一区二区三区在线观看 | 最新av电影网站| 成人另类视频| 717成人午夜免费福利电影| 水蜜桃色314在线观看| av在线首页| 99国产精品一区| 91亚洲精品一区二区| 国产www在线| 欧美日本一区二区高清播放视频| 亚洲一区二区久久久| 人妻激情偷乱频一区二区三区| 成人四虎影院| 日韩欧美一区二区在线| 中文精品无码中文字幕无码专区| a天堂中文在线88| 91在线观看污| 国产一区二区免费电影| 国产强被迫伦姧在线观看无码| 美女尤物久久精品| 久久久久久国产免费 | 日韩三级电影网| 国产.欧美.日韩| 91色p视频在线| 一炮成瘾1v1高h| 美女久久网站| 国产成人综合久久| 中文字幕在线字幕中文| 极品中文字幕一区| 欧美高清自拍一区| 久久精品第一页| 午夜精品久久久久99热蜜桃导演| xxx一区二区| 少妇太紧太爽又黄又硬又爽小说| 蜜桃成人av| 亚洲美女av在线播放| 精品国产av色一区二区深夜久久| 18国产精品| 亚洲а∨天堂久久精品喷水| 无码国产精品一区二区免费式直播 | 狠狠躁天天躁日日躁欧美| 免费人成在线观看视频播放| 欧美日韩经典丝袜| 亚洲午夜三级在线| 日韩视频在线视频| 岛国av免费在线观看| 欧美日韩国产页| 国产91在线免费| **欧美日韩在线观看| 在线视频一区二区三区| 激情婷婷综合网| 91国内外精品自在线播放| 欧美日韩一区二区三区高清| 蜜臀一区二区三区精品免费视频| 日韩欧乱色一区二区三区在线| 欧美日韩不卡一区二区| 制服丝袜中文字幕第一页 | 我要看黄色一级片| 欧美日韩一区二区国产| 久久久久久久网站| 久久久精品福利| 日韩国产在线观看| 成人中文字幕+乱码+中文字幕| 99草在线视频| av成人老司机| 视频一区免费观看| 中文字幕有码在线观看| 午夜久久久久久久久| 无码人妻丰满熟妇区毛片| 久久国内精品| 亚洲精品国产美女| 第一次破处视频| 中国精品18videos性欧美| 久久久久久久国产精品视频| www.国产一区二区| 国产综合久久久久久鬼色| 国产精品区一区二区三在线播放| 国产小视频在线观看| 亚洲视频一区二区在线观看| 久久av综合网| 老司机精品视频网| 亚洲第一区第二区| 国产jizz18女人高潮| 亚洲天堂偷拍| 国产精品视频久久| 手机看片福利在线| 最新国产の精品合集bt伙计| 成人免费aaa| 亚洲精品大全| 日韩精品中文字幕在线播放| 精品亚洲乱码一区二区| 国产亚洲激情| 91精品综合久久| 女人偷人在线视频| 一区二区三区在线视频观看58| 日韩精品视频久久| 日韩中文字幕无砖| 在线看福利67194| 成人免费视频毛片| 国产aⅴ综合色| 在线观看福利一区| 欧美黑人粗大| 亚洲国产精品中文| 草视频在线观看| 日韩成人伦理电影在线观看| 精品视频一区二区三区四区| 99热国产在线| 欧美日高清视频| 午夜在线观看一区| 午夜在线播放视频欧美| 成人黄动漫网站免费| 欧美极品另类| 欧美午夜精品一区二区三区| 国产精品无码久久久久一区二区| 国内揄拍国内精品久久| 92裸体在线视频网站| 91免费在线| 欧美伊人久久久久久午夜久久久久| 尤物网站在线观看| 亚洲大胆av| 国产 高清 精品 在线 a| 99热国产在线| 日韩视频在线永久播放| 侵犯稚嫩小箩莉h文系列小说| 日韩黄色免费电影| 日本一区二区在线视频| 一区二区乱码| 精品视频一区在线视频| 在线观看亚洲欧美| 99久久精品免费看国产免费软件| 日韩亚洲欧美一区二区| 亚洲91网站| 欧美成人亚洲成人| 亚洲av永久无码国产精品久久 | 精品国模一区二区三区欧美| 久久精品国产免费观看| 91激情在线观看| 中文字幕一区二区三| 五月天丁香花婷婷| 欧美在线精品一区| 国产精品精品软件视频| 黄网av在线| 日韩第一页在线| 国产无套丰满白嫩对白| 国产情人综合久久777777| 午夜免费福利在线| 99tv成人| 99久久精品免费看国产一区二区三区| 女人黄色免费在线观看| 精品国产免费视频| 欧美在线观看不卡| 国产精品色在线| 久久久久久久久久毛片| 国产一区观看| 欧美精品v日韩精品v国产精品| 国产成人免费9x9x人网站视频| 自拍偷拍免费精品| 国产成人麻豆精品午夜在线| 亚洲高清免费一级二级三级| 一级性生活毛片| 美女在线视频一区| 国产性生活免费视频| 日韩高清三区| 国产精品视频自拍| 国产探花视频在线观看| 日韩精品中文字幕视频在线| 一区二区视频播放| 亚洲主播在线观看| 熟女俱乐部一区二区| 激情av综合网| 国产成人a亚洲精v品无码| 日韩欧美精品一区| 国产嫩草一区二区三区在线观看 | 亚洲人成毛片在线播放女女| 日本一区二区视频| 136福利精品导航| 国产精品成人av在线| 手机电影在线观看| 亚洲性无码av在线| 亚洲va欧美va| 欧洲色大大久久| 久久亚洲成人av| 国产片一区二区| av电影在线播放| 久久成人久久爱| 日本一道本久久| 香蕉综合视频| 欧美日产一区二区三区在线观看| 精品视频在线观看免费观看| 日韩av免费一区| av丝袜在线| 久久国产精品久久久| 国产在线一二| 日韩电影中文字幕一区| 国产av一区二区三区精品| 色综合 综合色| 午夜偷拍福利视频| 亚洲欧洲日产国产综合网| 激情综合丁香五月| 国精产品一区一区三区mba桃花| 99re在线视频免费观看| 国内视频精品| 成年人视频大全| 99久久99久久精品国产片果冰| 欧美国产综合视频| 国产91精品入| 97在线资源站| 国产日韩欧美中文在线| 国产美女扒开尿口久久久| 这里有精品可以观看| 国内精品久久久久影院优| 超碰在线观看免费| 日韩在线国产精品| 福利在线视频导航| 亚洲人精品午夜在线观看| 色哟哟国产精品色哟哟| 日韩免费一区二区| 99国产揄拍国产精品| 欧美日韩国产高清一区| 天天天天天天天干| 欧美专区日韩专区| 无码人妻熟妇av又粗又大| 粉嫩av一区二区三区免费野| 日韩美女黄色片| 亚洲成人中文在线| 国产一级免费观看| 亚洲一区自拍偷拍| 国产精品suv一区二区| 亚洲午夜一区二区三区| 国产午夜视频在线播放| 亚洲成人综合视频| 韩国av免费观看| 婷婷国产v国产偷v亚洲高清| 99精品视频99| 日韩欧美高清视频| 69亚洲精品久久久蜜桃小说| 在线亚洲一区观看| 中文资源在线播放| 精品视频999| 国产乱淫av片免费| 欧美一区二区人人喊爽| 亚洲黄色小说网| 亚洲精品美女网站| 日本成人一区| 最近2019年中文视频免费在线观看 | 日韩专区在线播放| aaa大片在线观看| 午夜剧场成人观在线视频免费观看| 男女羞羞在线观看| 国产精品精品视频| 亚洲欧美久久精品| 97人人模人人爽人人喊38tv| 国产精品自在线拍| 欧美极品色图| 99九九热只有国产精品| 国产免费一区二区视频| 一本色道久久| 欧美一级特黄a| 国产精品1区二区.| 日韩av一二区| 国产精品国产三级国产aⅴ原创| 亚洲波多野结衣| 午夜国产精品影院在线观看| 天天干天天插天天射| 欧美va亚洲va香蕉在线| 欧美日韩国产综合视频| www.欧美精品| 麻豆免费在线| 国产在线拍揄自揄视频不卡99| 亚洲伊人影院| 亚洲国产精品综合| 在线播放日韩| 最新天堂中文在线| 波多野结衣精品在线| 手机看片日韩av| 亚洲国产欧美另类丝袜| 国产精品欧美综合| 欧美videossexotv100| 国产日本在线| 久久久久久久一| h1515四虎成人| 国产精品yjizz| 久久综合国产| 国产免费黄色av| 国产激情视频一区二区在线观看| 精品人伦一区二区三电影| 亚洲一区视频在线| 中文字幕精品一区二| 国产视频综合在线| 羞羞视频在线观看免费| 国产精品九九九| 午夜精品福利影院| 国产 欧美 日本| 蜜桃av一区二区| 精品无码人妻一区| 亚洲国产成人av好男人在线观看| 一级片aaaa| 亚洲人成五月天| 在线看片福利| 国产69精品久久久久9999apgf| 国产国产精品| 欧美三级理论片| 91免费国产在线观看| 久久精品美女视频| 在线不卡a资源高清| a视频网址在线观看| 欧亚精品中文字幕| 成人资源在线播放| 亚洲一区 在线播放| 麻豆免费精品视频| 亚洲国产天堂av| 色综合天天综合网国产成人综合天 | 久久国产剧场电影| 黄色片网站免费| 日韩欧美国产视频| 亚洲aⅴ在线观看| 97在线视频国产| 全国精品免费看| 大陆极品少妇内射aaaaa| 成人免费毛片片v| 国产网址在线观看| 欧美本精品男人aⅴ天堂| 在线三级电影| 99视频日韩| 国一区二区在线观看| 女同性αv亚洲女同志| 亚洲精品国久久99热| av av片在线看| 欧美精品手机在线| 视频在线亚洲| 自拍日韩亚洲一区在线| www.日韩av| 毛片在线免费视频| 亚洲精品自在久久| 色香欲www7777综合网| 日本视频一区在线观看| 日韩成人精品在线| 国产乱子轮xxx农村| 制服丝袜成人动漫| 午夜伦理大片视频在线观看| av免费观看久久| 国产欧美综合一区二区三区| 可以直接看的无码av| 色av综合在线| 午夜视频在线| 亚洲自拍偷拍区| 伊人狠狠色j香婷婷综合| 中文字幕 亚洲一区| 在线视频亚洲一区| 免费人成在线观看播放视频| 亚洲综合精品一区二区| 亚洲国产精品第一区二区| 国产精品300页| 欧美精品一二三区| 日韩av官网| 欧美日韩一区二区三| 麻豆国产欧美一区二区三区| 外国一级黄色片| 亚洲另类xxxx| 亚洲午夜国产成人| 一本久道高清无码视频| 国产午夜精品美女毛片视频| 国产精品久久久久久久久久久久久久久久久久 | 久久久久久久久久久久91| 综合久久一区二区三区| 日本免费一区视频| 国产精品久久久久久婷婷天堂| 五月天综合网站| 国产又黄又粗又猛又爽的视频 | 亚洲精品国产一区二| 欧洲成人在线观看| 五月精品视频| 国产三级视频网站| 制服视频三区第一页精品| 在线免费三级电影网站| 中文字幕久久一区| 久久久五月婷婷| 国产黄色片免费| 国产精品免费久久久久久| 亚洲图片在线| 欧美aaa级片| 亚洲激情自拍图| 亚洲综合资源| 国产1区2区在线| 亚洲国产视频a| 日本高清视频在线观看| 加勒比在线一区二区三区观看|