darraghd493

Basic Task Manager

Oct 30th, 2025
44,790
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.89 KB | Source Code | 0 0
  1. --[[
  2.     Basic Task Manager by darraghd493
  3.  
  4.     A basic Roblox task manager.
  5. ]]
  6.  
  7. local Library = {
  8.     ActiveTasks = {};
  9. }
  10. Library.__index = Library
  11.  
  12. --#region Internal Functions
  13. local function _removeTask(handle)
  14.     for i, task in ipairs(Library.ActiveTasks) do
  15.         if task == handle then
  16.             table.remove(Library.ActiveTasks, i)
  17.             return
  18.         end
  19.     end
  20. end
  21. --#endregion
  22.  
  23. function Library.new()
  24.     local self = setmetatable({
  25.         ActiveTasks = {};
  26.     }, Library)
  27.     return self
  28. end
  29.  
  30. function Library:Spawn(func: (cancelled: () -> boolean) -> ())
  31.     local handle = {
  32.         Running = true,
  33.         Completed = false,
  34.         Cancelled = false,
  35.     }
  36.  
  37.     handle.Cancel = function(self)
  38.         self.Cancelled = true
  39.         self.Running = false
  40.     end
  41.  
  42.     handle.IsRunning = function(self)
  43.         return self.Running
  44.     end
  45.  
  46.     task.spawn(function()
  47.         local ok, err = pcall(function()
  48.             func(function()
  49.                 return handle.Cancelled
  50.             end)
  51.         end)
  52.         if not ok then
  53.             error("Task error:", err)
  54.         end
  55.  
  56.         handle.Completed = true
  57.         handle.Running = false
  58.         _removeTask(handle)
  59.     end)
  60.  
  61.     table.insert(Library.ActiveTasks, handle)
  62.     return handle
  63. end
  64.  
  65. function Library:Delay(seconds: number, func: () -> ())
  66.     return self:Spawn(function(cancelled)
  67.         local elapsed = 0
  68.         while elapsed < seconds do
  69.             if cancelled() then return end
  70.             task.wait(0.1)
  71.             elapsed += 0.1
  72.         end
  73.         if not cancelled() then
  74.             func()
  75.         end
  76.     end)
  77. end
  78.  
  79. function Library:Shutdown()
  80.     for _, handle in ipairs(self.ActiveTasks) do
  81.         handle:Cancel()
  82.     end
  83.     table.clear(self.ActiveTasks)
  84. end
  85.  
  86. function Library:Count()
  87.     return #self.ActiveTasks
  88. end
  89.  
  90. return Library
  91.  
Advertisement
Add Comment
Please, Sign In to add comment