# com.cad.task 库模块帮助文档

[任务执行与恢复](https://www.aardio.com/zh-cn/docs/library/com/cad/tasks.html)

## com.cad.task 成员列表 <a id="com.cad.task" href="#com.cad.task">&#x23;</a>

CAD LISP回执与通用执行编排；增强实例和技能共享，不依赖Autos。

### com.cad.task.create(code,args,doc,options,cad) <a id="com.cad.task.create" href="#com.cad.task.create">&#x23;</a>
创建但不提交任务。code 是原始 LISP 源码，不是模板/文件名；args 在 LISP 中是局部变量。  
要求显式 doc、兼容 Visual LISP 和 HWND。默认 PostCommand；不自动回退 SendCommand。  
失败返回 null,err。  

[返回对象:comCadTaskObject](#comCadTaskObject)

### com.cad.task.open(path,doc) <a id="com.cad.task.open" href="#com.cad.task.open">&#x23;</a>
重新打开回执目录，可离线 read/wait/cancel。doc 可省略，只有 submit 与 nudge 时需要。  
已有提交标记的任务不能再次提交；重启 CAD 不能据此重放未知任务。  

[返回对象:comCadTaskObject](#comCadTaskObject)

### com.cad.task.resume(taskPath,timeout,doc) <a id="com.cad.task.resume" href="#com.cad.task.resume">&#x23;</a>
打开原回执并等待，统一结果路径与耗时；可离线。返回result,err,task，不提交或覆盖nudge选项。

### com.cad.task.run(code,args,doc,options,cad) <a id="com.cad.task.run" href="#com.cad.task.run">&#x23;</a>
创建并调用runTask；通常使用cad.RunLisp。可选cad传入已固定的增强实例以选择产品默认值。返回result,err,task。

### com.cad.task.runTask(task,doc,options) <a id="com.cad.task.runTask" href="#com.cad.task.runTask">&#x23;</a>
执行已创建任务：先保存journal，再唯一submit并wait；共享于LISP/C#。返回result,err,task。journal失败不提交；idleTimeout默认3000，0不额外等待。

## comCadTaskObject 成员列表 <a id="comCadTaskObject" href="#comCadTaskObject">&#x23;</a>

### comCadTaskObject.cancel() <a id="comCadTaskObject.cancel" href="#comCadTaskObject.cancel">&#x23;</a>
写入执行前取消请求；只有cancelled回执确认接受。不会中断已开始的程序，也不发送Esc；不是回滚。

### comCadTaskObject.id <a id="comCadTaskObject.id" href="#comCadTaskObject.id">&#x23;</a>
唯一请求 ID；不要另建 ID 重试未知的写操作。

### comCadTaskObject.nudge() <a id="comCadTaskObject.nudge" href="#comCadTaskObject.nudge">&#x23;</a>
显式向原doc发送同步SendCommand("(princ)")，只刷新队列，不重发源码。  
要求post任务仍submitted、原文档名称及HWND匹配且活动、CAD空闲；已有nudged标记不再刷新。  
可驱动实例中其他排队命令；可能阻塞到队列执行完，wait超时不能中断。成功true并记录标记，无需操作false，失败null,err。不激活/取消/回滚。

### comCadTaskObject.path <a id="comCadTaskObject.path" href="#comCadTaskObject.path">&#x23;</a>
回执目录；应保存此路径，以便跨会话继续查询。默认不会自动删除。

### comCadTaskObject.read() <a id="comCadTaskObject.read" href="#comCadTaskObject.read">&#x23;</a>
不访问CAD，只读当前快照；失败null,err。terminal=true才有终态回执，ok=true仅表示completed，仍须业务验收。  
nudged=true表示曾同步发送空操作刷新队列，不表示任务完成。

### comCadTaskObject.submit(doc) <a id="comCadTaskObject.submit" href="#comCadTaskObject.submit">&#x23;</a>
唯一提交认领；成功true，失败null,err。已识别COM拒绝在认领内有限重试，其他异常不重发。  
已有提交标记会拦截再次submit，重开任务需显式原doc。method=send可能在COM调用内阻塞，wait无法中断。

### comCadTaskObject.target <a id="comCadTaskObject.target" href="#comCadTaskObject.target">&#x23;</a>
创建时固定的文档 name、documentHwnd 和 CAD 主窗口 hwnd 快照。

### comCadTaskObject.wait(timeout) <a id="comCadTaskObject.wait" href="#comCadTaskObject.wait">&#x23;</a>
等待回执，默认options.timeout（10000毫秒），0只查询。返回result,err。  
错误有parse/execute/serialize阶段；超时是state=timeout/terminal=false快照，不取消、不重发。  
默认不访问COM。创建时显式nudge=true且持有原doc，才可在submitted超过nudgeDelay（默认800毫秒，0有效）后尝试一次同步刷新。此COM调用可能阻塞且超出timeout。
