task

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

任務 庫允許使用任務排程器來安排功能和線程。

這個庫中的功能一般支持功能和線程。在大多數情況下,使用函數即可足夠,但對於更進階的情況來說,建議您熟悉 coroutine 圖書館。

概要

函式

  • spawn(functionOrThread : function | coroutine,... : Variant):coroutine

    立即通過引擎排程器呼叫/恢復功能/子程序。

  • defer(functionOrThread : function | coroutine,... : Variant):coroutine

    在現有暫停週期結束時呼叫/恢復功能/子程序。

  • delay(duration : number,functionOrThread : function | coroutine,... : Variant):coroutine

    將功能/子程序在指定時間(秒)後的下一個心跳中被稱為/重新啟動,而不會限制速度。

  • 導致以下代碼並行運行。

  • 導致以下代碼在串行中運行。

  • wait(duration : number):number

    在指定的時間(秒)過後發出下一個心跳,直到發出為止,不會限制速度。

  • cancel(thread : coroutine):()

    取消線執行緒,防止它被重新啟動。

函式

接受一個函數或線程(由 coroutine.建立、創作reate 返回),並立即通過引擎的排程工作排程器呼叫/恢復它。在第一個之後的參數會傳送到功能/線程。

此功能是基於快速生成模式,而不是取代已停用的全球 spawn 功能。建議使用此功能來取代 fastSpawn。

如果呼叫腳本目前正在串行執行階段運行,則生成的函數或線程在當前串行執行階段中被恢復。如果呼叫腳本目前正在並行執行階段運行,則生成的函數或線程在當前並行執行階段中被恢復。欲了解更多信息,請參閱 並行 Luau

參數

functionOrThread: function | coroutine

coroutine.create 返建立、創作的函數或線程。

...: Variant

傳送到功執行緒或線程的參數。

返回

預定的執行緒。

接受一個函數或線程(由 建立、創作oroutine.create 返回)並將其延遲到目前暫停週期結束時,在此時它被重新啟動以使用引擎的排程器,與 task.spawn() 一樣。在第一個之後的參數會傳送到功能/線程。

此功能應在需要類似於 task.spawn() 的行為時使用,但線程不需要立即運行。

如果呼叫腳本目前正在串行執行階段運行,則延遲的功能或線程在串行執行階段會被恢復。如果呼叫腳本目前正在並行執行階段運行,則延遲的功能或線程在並行執行階段會被恢復。欲了解更多信息,請參閱 並行 Luau

參數

functionOrThread: function | coroutine

coroutine.create 返建立、創作的函數或線程。

...: Variant

傳送到功執行緒或線程的參數。

返回

預定的執行緒。

接受一個函數或線程(由 coroutine.建立、創作reate 返回)並將其安排在指定的時間後的下一個 Heartbeat 呼叫/重新啟動。第二個以後的參數傳送到功能/線程。

此功能與過時的全球 delay 功能不同,在 沒有限制發生 :在足夠長的時間過去的相同心跳步驟中,該功能必須被稱為/恢復。提供零(0)的持續時間將保證函數在下一個心跳中被呼叫。

您可以通過在預定和預定函數中呼叫 os.clock() 來計算實際通過的時間。

如果呼叫腳本目前正在串行執行階段運行,則延遲的功能或線程在串行執行階段會被恢復。如果呼叫腳本目前正在並行執行階段運行,則延遲的功能或線程在並行執行階段會被恢復。欲了解更多信息,請參閱 並行 Luau

參數

duration: number

在呼叫/重新啟動功能/線程之前必須通過的最小秒數。

functionOrThread: function | coroutine
...: Variant

在呼叫/重新啟動功能/線程時傳送給功能/線程的參數。

返回

預定的執行緒。

desynchronize

()

如果呼叫腳本目前正在串行執行階段運行,desynchronize將暫停腳本,腳本將在下一個並行執行階段重新啟動。如果呼叫腳本目前正在並行執行階段運行,desynchronize 將立即返回並沒有效果。

只有屬於演員的子孫的腳本才能呼叫此方法。如果在行動者之外的腳本呼叫此方法,將會發生錯誤。ModuleScript 也可以呼叫 desynchronize ,只要模塊呼叫它的實例化被 Actor 的後裔腳本需要即可。

欲了解更多信息,請參閱 並行 Luau

返回

()

synchronize

()

如果呼叫腳本目前正在並行執行階段運行,synchronize將暫停腳本,腳本將在下一個串行執行階段繼續運行。如果呼叫腳本目前正在串行執行階段運行,synchronize 將立即返回並沒有效果。

只有屬於演員的子孫的腳本才能呼叫此方法。如果在行動者之外的腳本呼叫此方法,將會發生錯誤。ModuleScript 也可以呼叫 synchronize ,只要模塊呼叫它的實例化被 Actor 的後裔腳本需要即可。

欲了解更多信息,請參閱 並行 Luau

返回

()

wait

在指定的時間(秒)過後,將現有線程保留到期,然後在下一步的 Heartbeat 步中恢復線程。實際經過的時間數返回。

如果沒有提供期限,它會默認為零(0)。這意味著線程在下一步繼續運行,在行為上與 RunService.Heartbeat:Wait() 相等

與過時的全球 wait 不同,此函數 不會限制 並保證在到期時發生的第一個心跳中暫停線程。此功能也只返回已過時間和沒有其他內容。

如果呼叫腳本目前正在進行串行執行階段,則腳本在串行執行階段會被重新啟動。如果呼叫腳本目前正在並行執行階段運行,則腳本在並行執行階段會重新啟動。欲了解更多信息,請參閱 並行 Luau

參數

duration: number

在現有線程重新啟動前應過期的秒數數量。

預設值:0

返回

cancel

()

取消線程並關閉它,防止它被手動或任務排工作排程器重新啟動。

這個功能可以與任務圖書館的其他成員一起使用,返回線程以在它們被恢復之前取消它們。例如:


local thread = task.delay(5, function()
print("Hello world!")
end)
task.cancel(thread)

注意:線程可能處於一個狀態,無法取消它們。例如,目前執行的線程和已恢復另一個任務的線程可能無法取消。如果是這樣,將生成一個 lua 錯誤。

然而,代碼不應依賴特定線程狀態或條件導致 task.cancel() 失敗。未來的更新可能會消除這些限制,並允許這些狀態的線程成功取消。

參數

thread: coroutine

將被取消的線程。

返回

()