작업(task)은 현재 실행 중인 비동기화 함수의 상태를 나타내는 데 사용되는 오브젝트입니다. 작업 오브젝트는 비동기화 함수가 정지된 위치 및 해당 정지 지점에서 로컬 변수의 값을 식별하는 데 사용됩니다.
작업은 협업 멀티태스킹 환경에서 동시에 실행됩니다.
작업은 완료될 때까지 하나 이상의 업데이트의 수명에 따라 일정 시간 동안 지속될 수 있습니다.
작업은 어떤 논리적인 순서로든 순차적이거나, 중첩되거나, 엇갈릴 수 있습니다.
작업의 시퀀스와 중첩되는 흐름은 구조적 또는 비구조적 동시성 표현식을 사용해 명시합니다.
각 작업은 어떤 논리적인 시간의 순서로든 순차적이거나, 중첩되거나, 엇갈릴 수 있습니다. 내부적으로 작업은 1개 또는 그 이상의 호출자를 가질 수 있으며, 콜 스택이 아니라 호출 그래프를 형성하는 종속 서브 작업을 갖거나 갖지 않을 수 있습니다.
task(t:type) 클래스를 사용해 직접 프로그래밍 방식의 쿼리를 하고 비구조적으로 작업을 조작할 수 있지만, 일반적으로 더 나은 명확성, 성능, 효율성을 위해 구조적 동시성 표현식을 사용해 작업을 처리하는 것이 권장됩니다.
현재 task의 함수 중 노출되어 있는 함수는 현재 작업이 완료될 때까지 기다리는 Await() 함수뿐입니다. 작업을 멈춰 두고 호출 시 돌아올 호출자를 추가하는 함수입니다.
spawn{AsyncFunction3()}
# Get task to query / give commands to
# starts and continues independently
Task2 := spawn{Player.MoveTo(Target1)}
Sleep(1.5) # Wait 1.5 Seconds
MyLog.Print("1.5 Seconds into Move_to()")
Task2.Await() # wait until MoveTo() completed
위 예시와 유사하게 아래 코드에서는 구조적 동시성 표현식을 사용합니다.
sync:
AsyncFunction3() # Task 1
block:
Player.MoveTo(Target1) # Task 2
Sleep(0.5) # Wait 0.5 Seconds
Target1.MoveTo(Target2)
block: # Task 3
Sleep(1.5) # Wait 1.5 Seconds
MyLog.Print("1.5 Seconds into Move_to()")