异步多任务
3.0
创建异步任务task = async_task(func, arg1, arg2, ...)
- 参数
func
函数名args
传递给函数的参数
- 返回
task
异步任务。在调用以下 2 个函数前,任务不会执行
兼容说明
等效于以下写法:
task = coroutine.create(function() return fun(args) end)
3.0
等待全部任务完成ret1, ret2, ... = wait_all(task1, task2, ...)
- 参数
tasks
异步任务
- 返回
rets
任务返回值
3.0
等待任一任务完成ret, index = wait_any(task1, task2, ...)
- 参数
tasks
异步任务
- 返回
ret
已完成任务的返回值index
已完成任务的索引
示例
function 运动(param)
print(param, '开始运行')
movej({j1=0,j2=0,j3=0,j4=0,j5=0,j6=0}, 0, 0, 1, 0)
return "运动完成"
end
function 夹爪()
wait(1000)
set_claw(0, 100)
return "夹爪完成"
end
sync() -- 等待前面运动完成
disable_auto_sync() -- 让`print`/`wait`/`set_claw`等具有`auto_sync`标志的指令,无需等待运动完成 即可执行
ret1, ret2 = wait_all(async_task(运动, '线程一'), async_task(夹爪))
print("运动 任务返回值: ", ret1)
print("夹爪 任务返回值: ", ret2)
local task_timeout = async_task(wait, 1000) -- 创建等待超时的任务
ret, index = wait_any(async_task(运动, '线程二'), task_timeout)
if index == 2
then -- task_timeout先执行完成
print("超时")
else -- 运动先执行完成
print("运动 任务返回值: ", ret)
end
enable_auto_sync() -- 让`print`/`wait`/`set_claw`等具有`auto_sync`标志的指令,等待运动完成后 才可执行