스케줄링 코드는 특정 작업이나 주기가 완료된 후 코드를 실행하거나 특정 기간 동안 코드를 지연하는 등 다양한 상황에서 유용합니다.You can use the task 라이브러리를 사용하여 Roblox의 작업 일정표 를 최적화하여 코드를 관리하고 일정을 예약할 수 있습니다.또한 일부 추가 기능이 있는 코드를 일정에 배치하기 위해 coroutine와 유사한 라이브러리를 사용할 수 있습니다.
일반 메서드
다음은 코드를 예약하는 데 가장 일반적으로 사용되는 task 메서드입니다.코드가 최적으로 실행되도록 하려면 레거시 일정 예약 방법(예: wait())에 대한 태스크 메서드를 사용해야 합니다.
다음 표에서는 관련 레거시 글로벌 메서드와 선호되고 더 최적화된 동일 메서드를 나열합니다:
| 레거시 글로벌 메서드 | 태스크 메서드 | 추가 대안 | | :-------------------------------------- | :------------------------------------------------- | :------------------------------------------------- | | wait() | task.wait() | RunService.Heartbeat | | wait(n) | Library.task.wait()\|task.wait(n) | | | spawn(f) | Library.task.defer()\|task.defer(f) | Library.task.delay()\|task.delay(0, f) | | delay(n, f) | Library.task.delay()\|task.delay(n, f) | | | spawn(function() f(uv1, ...) end) | Library.task.defer()\|task.defer(f, uv1, ...) | Library.task.delay()\|task.delay(0, f, uv1, ...) | | delay(n, function() f(uv1, ...) end) | Library.task.delay()\|task.delay(n, f, uv1, ...) | |
태스크.spawn
task.spawn() 스레드나 함수를 가져와 엔진의 스케줄러를 통해 즉시 재개합니다 **** .추가 인수가 중단된 스레드나 함수에 전달됩니다.
다음 코드 샘플은 집합의 개체를 반복하는 함수를 호출할 때 task.spawn()를 사용하는 방법의 예입니다.
local function playerAdded(player)
...
(yield)
end
for _, player in Players:GetPlayers() do
task.spawn(playerAdded, player)
end
작업.defer
task.defer() 스레드나 함수를 가져와 다음 재시작 주기에 엔진의 스케줄러로 재시작할 때까지 지연합니다.추가 인수가 스레드나 함수 재개에 전달됩니다.
일반적으로 비슷한 동작을 task.spawn() 원하지만 즉시 실행되는 스레드에 신경 쓰지 않을 때 이를 사용해야 합니다.다음 코드 샘플은 print() 문이 "A" 문이 실행될 때까지 지연되는 방법을 보여줍니다: print() 문에 대한 "B" 문이 실행될 때까지:
task.defer(print, "A")print("B")--> B--> A
작업.지연
task.delay()는 스레드나 함수를 가져와 지정된 시간이 경과한 후 다음 Heartbeat 단계에서 재개할 일정을 예약합니다.스레드는 내장된 오류 처리 및 다른 엔진 기능 지원으로 재시작됩니다.추가 인수가 스레드나 함수 재개에 전달됩니다.
실제 지연 시간이 다를 수 있으므로 다음 코드 샘플은 현재 시간을 인수로 전달하여 계산할 수 있는 방법을 보여줍니다:
task.delay(2, function(scheduledTime)
print(os.clock() - scheduledTime) --> 2.038702
end, os.clock())
0의 기간은 다음 단계에서 스레드 또는 함수가 재개되도록 합니다.
작업.대기
task.wait() 지정된 기간(초)이 경과할 때까지 현재 스레드를 생성하고 다음 Heartbeat 단계에서 스레드를 재개합니다.
실제 수확 시간은 다를 수 있습니다. 다음 코드 샘플은 이 메서드가 편의를 위해 반환하는 방법을 보여줍니다.
실제 지연 시간이 다를 수 있기 때문에 다음 코드 샘플은 메서드의 반환 값을 저장하여 실제 시간을 가져올 수 있는 방법을 보여줍니다:
local elapsedTime = task.wait(2) -- 2초 동안 대기print(elapsedTime) --> 2.0792941
기간이 지정되지 않으면 기간은 0으로 기본 설정되어 스레드가 다음 단계에서 자동으로 재개됩니다.즉, task.wait() 는 행동에서 RunService.Heartbeat 와 동일합니다.