--[[ Basic Task Manager by darraghd493 A basic Roblox task manager. ]] local Library = { ActiveTasks = {}; } Library.__index = Library --#region Internal Functions local function _removeTask(handle) for i, task in ipairs(Library.ActiveTasks) do if task == handle then table.remove(Library.ActiveTasks, i) return end end end --#endregion function Library.new() local self = setmetatable({ ActiveTasks = {}; }, Library) return self end function Library:Spawn(func: (cancelled: () -> boolean) -> ()) local handle = { Running = true, Completed = false, Cancelled = false, } handle.Cancel = function(self) self.Cancelled = true self.Running = false end handle.IsRunning = function(self) return self.Running end task.spawn(function() local ok, err = pcall(function() func(function() return handle.Cancelled end) end) if not ok then error("Task error:", err) end handle.Completed = true handle.Running = false _removeTask(handle) end) table.insert(Library.ActiveTasks, handle) return handle end function Library:Delay(seconds: number, func: () -> ()) return self:Spawn(function(cancelled) local elapsed = 0 while elapsed < seconds do if cancelled() then return end task.wait(0.1) elapsed += 0.1 end if not cancelled() then func() end end) end function Library:Shutdown() for _, handle in ipairs(self.ActiveTasks) do handle:Cancel() end table.clear(self.ActiveTasks) end function Library:Count() return #self.ActiveTasks end return Library