mirror of
https://github.com/luanti-org/luanti.git
synced 2025-08-01 17:38:41 +00:00
Implement API to cancel async jobs
Co-authored-by: sfan5 <sfan5@live.de>
This commit is contained in:
parent
535d757563
commit
660151972f
12 changed files with 232 additions and 78 deletions
|
@ -8,15 +8,24 @@ function core.async_event_handler(jobid, retval)
|
|||
core.async_jobs[jobid] = nil
|
||||
end
|
||||
|
||||
local job_metatable = {__index = {}}
|
||||
|
||||
function job_metatable.__index:cancel()
|
||||
local cancelled = core.cancel_async_callback(self.id)
|
||||
if cancelled then
|
||||
core.async_jobs[self.id] = nil
|
||||
end
|
||||
return cancelled
|
||||
end
|
||||
|
||||
function core.handle_async(func, callback, ...)
|
||||
assert(type(func) == "function" and type(callback) == "function",
|
||||
"Invalid core.handle_async invocation")
|
||||
local args = {n = select("#", ...), ...}
|
||||
local mod_origin = core.get_last_run_mod()
|
||||
|
||||
local jobid = core.do_async_callback(func, args, mod_origin)
|
||||
core.async_jobs[jobid] = callback
|
||||
local id = core.do_async_callback(func, args, mod_origin)
|
||||
core.async_jobs[id] = callback
|
||||
|
||||
return true
|
||||
return setmetatable({id = id}, job_metatable)
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue