/////////////////////////////////////////////////////////////////////////////////////////////////// 
//// Using Parallelization API to execute tasks concurrently
/////////////////////////////////////////////////////////////////////////////////////////////////// 


//Simple parallization
function task1(){
    m1.moveRel(1.0)
    return m1.getPosition()
}    

function task2(){
    m2.moveRel(1.0)
    return m1.getPosition()
}    

function task3(){
    return ai1.read()
}    

ret = parallelize(task1, task2, task3)
print (ret
)


//Fork amd join
ret = fork(task1, task2, task3)
print (ai1.read()
)
ret = join(ret)
print (ret
)



//Functions with parameters
function moveRelative(motor, step){
    motor.moveRel(step)
    return motor.getPosition()
}    

ret = parallelize([moveRelative,[m1,-2]], [moveRelative,[m2,-2]])
print (ret
)


//Exception in parallel task is thrown back to script
try{
    parallelize([moveRelative,[ai1,1]], [moveRelative,[ai2,1]])
}catch (ex){
    print ("Ok, caught exception:"
)
    print(ex)
}    
    




