AsyncProcedures异步过程扩展

« 返回首页

« 返回扩展首页

AsyncProcedures异步过程扩展

下载和安装

开发动机

Async Proc是一个扩展,您可以使用它来异步运行过程。您不再需要等待循环完成,也不必担心由于Android系统认为您的应用程序无响应而导致应用崩溃。

功能概述

AsyncProcedures异步过程扩展提供以下核心功能:

  • 异步执行: 允许过程异步运行,避免阻塞主线程
  • 防止ANR: 防止应用程序因长时间运行的操作而崩溃
  • 循环优化: 特别适用于需要长时间运行的循环操作
  • 性能提升: 提高应用响应性,避免界面冻结

使用场景

适用情况

  1. 大数据处理: 处理大量数据时的异步操作
  2. 文件读写: 大文件的读取和写入操作
  3. 网络请求: 需要一定时间的网络操作
  4. 复杂计算: 耗时的数学计算或算法处理
  5. 批量操作: 需要循环执行的批量任务

典型应用案例

  • 数据加载: 从数据库或文件加载大量数据
  • 图像处理: 批量处理图像文件
  • 列表操作: 对长列表进行遍历和处理
  • API调用: 多个API请求的异步处理

基本用法

异步执行过程

使用AsyncProcedures扩展执行异步过程的基本模式:

when Button1.Click() {
  AsyncProc1.CallAsynchronous("处理数据")
}

when AsyncProc1.CallFinishedWithResult(procedureName, arguments, result) {
  Label1.Text = join("完成:", procedureName)
}

带参数的异步过程

when Button1.Click() {
  AsyncProc1.CallAsynchronous("处理数据")
}

when AsyncProc1.CallFinishedWithResult(procedureName, arguments, result) {
  Label1.Text = join("完成:", procedureName)
}

属性

IsRunning是否正在运行
指示是否有异步过程正在执行。
Timeout超时时间
设置异步过程的超时时间(毫秒),超过此时间过程将被中断。

方法

运行过程(过程名称)
异步运行指定的过程。该过程将在后台线程中执行,不会阻塞主线程。
运行过程带数据(过程名称,数据)
异步运行指定的过程,并传递数据参数。
StopProcedure停止过程()
停止当前正在执行的异步过程。
获取结果() → {:.any}
获取已完成的异步过程的返回结果。

事件

ProcedureCompleted过程完成()
异步过程执行完成时触发。
过程完成带结果(结果)
带返回值的异步过程完成时触发,包含过程的结果数据。
过程错误(错误信息)
异步过程执行过程中发生错误时触发。
ProcedureTimeout过程超时()
异步过程执行超时时触发。

最佳实践

1. 过程设计原则

  • 避免UI操作: 异步过程中避免直接操作UI组件
  • 合理拆分: 将大任务拆分为适当大小的异步任务
  • 错误处理: 为异步过程添加适当的错误处理机制

2. 性能优化

  • 控制并发: 避免同时运行过多的异步过程
  • 资源管理: 注意异步过程中的资源使用和释放
  • 内存优化: 避免在异步过程中产生大量内存占用

3. 用户体验

  • 进度反馈: 为长时间运行的异步过程提供进度反馈
  • 加载提示: 显示加载状态或进度条
  • 结果处理: 妥善处理异步过程的结果

使用示例

示例1:数据处理

when Button1.Click() {
  AsyncProc1.CallAsynchronous("处理数据")
}

when AsyncProc1.CallFinishedWithResult(procedureName, arguments, result) {
  Label1.Text = join("完成:", procedureName)
}

示例2:文件操作

when Button1.Click() {
  AsyncProc1.CallAsynchronous("处理数据")
}

when AsyncProc1.CallFinishedWithResult(procedureName, arguments, result) {
  Label1.Text = join("完成:", procedureName)
}

常见问题

Q: 异步过程中如何更新UI?

A: 异步过程不能直接更新UI,需要在过程完成后的回调事件中更新UI组件。

Q: 如何处理异步过程的错误?

A: 使用ProcedureError事件来捕获和处理异步过程中的错误。

Q: 异步过程会阻塞应用吗?

A: 不会。异步过程在后台线程中执行,不会阻塞主线程和UI操作。

Q: 如何控制异步过程的执行顺序?

A: 可以通过在前一个异步过程的完成事件中启动下一个异步过程来控制执行顺序。

相关扩展

如果您需要更多的后台任务处理功能,还可以考虑以下扩展:

  • Background Tasks: 专门的后台任务处理扩展
  • DelayHandler: 延迟处理和时间控制扩展
  • Web Component: 异步网络请求处理

版权信息

本文档内容依据原作者发布页面整理翻译,版权归原作者所有。

  • 原作者:Abhijith(Abhijith_Dominic)
  • 原始网址:https://community.kodular.io/t/free-async-procedures-extension/21322
文档反馈