HarmonyOS 鸿蒙Next 冷启动App,taskPool的isCanceled和sendData在箭头函数中调用失败,之后才能成功

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 冷启动App,taskPool的isCanceled和sendData在箭头函数中调用失败,之后才能成功

如题,冷启动App ,taskPool 的 isCanceled 和 sendData 在箭头函数中会调用失败,之后才能成功。

日志:
[(task.cpp:340)(IsCanceled)] taskpool:: call isCanceled not in Concurrent function
[(task.cpp:418)(SendData)] taskpool:: SendData is not called in the concurrent function
[(task.cpp:340)(IsCanceled)] taskpool:: call isCanceled not in Concurrent function
[(task.cpp:418)(SendData)] taskpool:: SendData is not called in the concurrent function
[(task.cpp:340)(IsCanceled)] taskpool:: call isCanceled not in Concurrent function
[(task.cpp:418)(SendData)] taskpool:: SendData is not called in the concurrent function
[(task.cpp:340)(IsCanceled)] taskpool:: call isCanceled not in Concurrent function
[(task.cpp:418)(SendData)] taskpool:: SendData is not called in the concurrent function
[(task.cpp:340)(IsCanceled)] taskpool:: call isCanceled not in Concurrent function
[(task.cpp:418)(SendData)] taskpool:: SendData is not called in the concurrent function
[(task.cpp:340)(IsCanceled)] taskpool:: call isCanceled not in Concurrent function
[(task.cpp:418)(SendData)] taskpool:: SendData is not called in the concurrent function


代码:
@Concurrent
async function invokeSearchFun(
context: common.ApplicationContext,
account: string,
searchDataSource: number[],
searchWord: string): Promise<void> {

let callback = (resolve: Map<string, GlobalSearchData<Object>>) => {
let searchResult = resolve.get(searchWord)
if (searchResult) {
if (!taskpool.Task.isCanceled()) {
taskpool.Task.sendData(searchResult);
}
}
}
if (searchDataSource.indexOf(SearchTabType.Contacts) != -1) {
//查询联系人
searchViewModel.queryContactUserByAllTab(searchWord).then(callback)
}

if (searchDataSource.indexOf(SearchTabType.Group) != -1) {
//查询群组
searchViewModel.getGroupDataByAllTab(searchWord).then(callback)
}

}
 


更多关于HarmonyOS 鸿蒙Next 冷启动App,taskPool的isCanceled和sendData在箭头函数中调用失败,之后才能成功的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
sendData 使用说明:

该接口在taskpool的线程中调用。

避免在回调函数中使用该方法。

调用该接口时确保处理数据的回调函数在宿主线程已注册。

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-taskpool-V5#senddata11

更多关于HarmonyOS 鸿蒙Next 冷启动App,taskPool的isCanceled和sendData在箭头函数中调用失败,之后才能成功的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,冷启动App时遇到taskPoolisCanceledsendData在箭头函数中调用失败的问题,通常与任务执行的生命周期和上下文环境有关。在鸿蒙系统的异步任务管理中,taskPool的任务执行是在特定的线程池中进行的,而箭头函数可能不会正确绑定执行时的上下文(this指向)。

确保isCanceledsendData方法调用时,this指向正确的实例是关键。如果这些方法依赖于特定的类实例,使用传统函数而非箭头函数定义回调可能更为合适,因为传统函数不会自动绑定this,而是根据调用时的上下文决定。

此外,检查任务是否在任务被取消或数据发送之前就已经完成或异常终止也是必要的。鸿蒙系统的任务调度机制可能会因任务状态变化而导致方法调用失败。

可以尝试以下步骤:

  1. 确认taskPool任务中使用的函数类型,确保this指向正确。
  2. 检查任务状态,确保在调用isCanceledsendData之前任务处于有效状态。
  3. 使用日志或调试工具跟踪任务执行流程,定位问题发生的具体环节。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部