关于异步 API
CICS® TS 提供了一组异步 API 命令,这些命令允许应用程序开发者使用异步编程模型,该模型可以异步运行子任务。
异步 API 的元素
- 用于发送请求和接收响应的 API 命令。
- 发出 EXEC CICS RUN TRANSID 和 EXEC CICS FETCH 命令以启动子任务并与子任务进行交互的父任务。
- FREE CHILD 命令,用于在父程序完成之前释放与子程序关联的资源。
- 以异步方式作为单独工作单元对父任务运行的子任务。 每个父代都可以有一个或多个子代。
- 可以选择用于在父任务和子任务之间传递数据的通道 (如果需要)。
异步 API 管理父任务和子任务的状态,清除所有关联资源,并以标准方式管理通道中的数据。 使用 API 对于历史上长期运行的任务 (例如, Web Service 应用程序) 具有重大好处,这些应用程序可以在需要时创建和释放子任务,以最大程度地减少其系统占用量。
异步 API 的工作方式
父任务是运行程序的任何任务,该程序使用 EXEC CICS RUN TRANSID 和 EXEC CICS FETCH 命令来启动子任务并与子任务进行交互。 此示例父程序使用 EXEC CICS PUT CONTAINER 命令来创建容器和通道以与子程序通信,然后使用 EXEC CICS RUN TRANSID 命令创建子任务,该命令将运行由 transid定义的子程序。 子程序接收指定通道的副本并开始处理,使父程序可以继续任何其他逻辑。 当父命令需要子任务的结果或完成状态时,父命令可以发出 EXEC CICS FETCH CHILD 命令。 如果子任务已成功完成并传递回通道,那么将使用 EXEC CICS GET CONTAINER 命令来检索输出。
EXEC CICS PUT CONTAINER(container) CHANNEL(channel)
FROM(struct) FLENGTH(len_struct) BIT
RESP(reason) RESP2(response)
EXEC CICS RUN TRANSID(transid) CHILD(child)
CHANNEL(channel) RESP(reason) RESP2(response)
…
EXEC CICS FETCH CHILD(child)
ABCODE(abcode)
COMPSTATUS(child_status)
CHANNEL(fetch_channel)
RESP(reason) RESP2(response)
EXEC CICS GET CONTAINER(container) CHANNEL(fetch_channel)
INTO(struct) FLENGTH(len_struct)
RESP(reason) RESP2(response)
子程序可以正常使用 CICS API 命令,但通常会使用 EXEC
CICS GET CONTAINER 和 EXEC CICS PUT CONTAINER 命令与父程序交互。 此示例子程序使用 EXEC CICS GET
CONTAINER 命令来检索父程序传递的容器,运行其他一些逻辑以修改内容 (...) ,然后使用 EXEC CICS PUT
CONTAINER 命令将结果发回给父程序使用。
EXEC CICS GET CONTAINER(container) CHANNEL(channel)
INTO(struct) FLENGTH(len_struct)
RESP(reason) RESP2(response)
...
EXEC CICS PUT CONTAINER(container) CHANNEL(channel)
FROM(struct) FLENGTH(len_struct) BIT
RESP(reason) RESP2(response)
使用通道在父程序和子程序之间进行通信是可选的。 例如,如果父程序只需要知道子任务是否已成功完成,那么 EXEC CICS FETCH 命令就足够了。