API coroutine.resume

Begins or resumes a coroutine.
 success [, ...] = coroutine.resume(co [, ...])
 success, errMsg = coroutine.resume(co [, ...])
==Arguments==
:;co: - A suspended coroutine.
;... : Variable arguments - Return values for () when resuming, or the function header if it didn't begin yet.
==Returns==
:;success: - true when the coroutine runs without error.
;... : Variable arguments - Arguments supplied to () if the coroutine yielded, or return values if it reached the end.
:;errMsg: - A description of the error, or why success was false.
==Details==
* There is an implicit (), so execution can resume even when an error occurs inside the coroutine.
* If the coroutine had previously reached its conclusion, success will be false.
==Example==
Yields every 1ms and resumes on the next frame until completion.
local function workload(stopTime)
	for i=1, 1000000 do
		-- wasting time
		local x = i * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9
		if GetTimePreciseSec() >= stopTime then
			stopTime = coroutine.yield(1000000 - i) -- passes the number of iterations left, receives a new stopTime
		end
	end
end
local co = coroutine.create(workload)
local ticker
ticker = C_Timer.NewTicker(0, function()
	local success, remaining = coroutine.resume(co, GetTimePreciseSec() + 0.001)
 if success and remaining then
		print("There are " .. remaining .. " iterations left.")
	else
		ticker:Cancel()
		print("Reached the end!")
	end
end)
==External links==
* Roberto lerusalimschy 2003, Programming in Lua, Chapter 9.1: Coroutine Basics.