function Maid.GiveTask(g,x)assert(x,"\084\097\115\107 \099\097\110\110\111\116 \098\101 \102\097\108\115\101 \111\114 \110\105\108")local u=#g._tasks+1 g[u]=x if type(x)=="\116\097\098\108\101"and(not x.Destroy and not Promise.Is(x))then warn("\091\077\097\105\100\046\071\105\118\101\084\097\115\107\093 - \071\097\118\101 \116\097\098\108\101 \116\097\115\107 \119\105\116\104\111\117\116 \046\068\101\115\116\114\111\121\n\n"..debug.traceback())end return u end function Maid.GivePromise(g,x)assert(Promise.Is(x),"\069\120\112\101\099\116\101\100 \112\114\111\109\105\115\101")if x:GetStatus()~=Promise.Status.Started then return x end local u=Promise.Resolve(x)local e=g:GiveTask(u)u:Finally(function()g[e]=nil end)return u end

function Maid:GiveTask(task)
	assert(task, "Task cannot be false or nil")

	local taskId = (#self._tasks + 1)
	self[taskId] = task

	if (type(task) == "table" and (not task.Destroy) and (not Promise.Is(task))) then
		warn("[Maid.GiveTask] - Gave table task without .Destroy\n\n" .. debug.traceback())
	end

	return taskId
end


function Maid:GivePromise(promise)
	assert(Promise.Is(promise), "Expected promise")
	if (promise:GetStatus() ~= Promise.Status.Started) then
		return promise
	end
	local newPromise = Promise.Resolve(promise)
	local id = self:GiveTask(newPromise)
	newPromise:Finally(function()
		self[id] = nil
	end)
	return newPromise
end

