.
\ No newline at end of file
diff --git a/[core]/async/README.md b/[core]/async/README.md
new file mode 100644
index 00000000..9c76d28d
--- /dev/null
+++ b/[core]/async/README.md
@@ -0,0 +1,15 @@
+[ESX] Async
Discord - Website - Documentation
+
+A very Simple resource that allows resources to run tasks asynchronously.
+
+## Legal
+
+async - asynchronous tasks.
+
+Copyright (C) 2015-2022 Jérémie N'gadi
+
+This program Is free software: you can redistribute it And/Or modify it under the terms Of the GNU General Public License As published by the Free Software Foundation, either version 3 Of the License, Or (at your option) any later version.
+
+This program Is distributed In the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty Of MERCHANTABILITY Or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License For more details.
+
+You should have received a copy Of the GNU General Public License along with this program. If Not, see .
diff --git a/[core]/async/async.lua b/[core]/async/async.lua
new file mode 100644
index 00000000..aacd1a44
--- /dev/null
+++ b/[core]/async/async.lua
@@ -0,0 +1,71 @@
+Async = {}
+
+function Async.parallel(tasks, cb)
+ if #tasks == 0 then
+ cb({})
+ return
+ end
+
+ local remaining = #tasks
+ local results = {}
+
+ for i = 1, #tasks, 1 do
+ CreateThread(function()
+ tasks[i](function(result)
+ results[#results+ 1] = result
+
+ remaining = remaining - 1;
+
+ if remaining == 0 then
+ cb(results)
+ end
+ end)
+ end)
+ end
+end
+
+function Async.parallelLimit(tasks, limit, cb)
+ if #tasks == 0 then
+ cb({})
+ return
+ end
+
+ local remaining = #tasks
+ local running = 0
+ local queue, results = {}, {}
+
+ for i=1, #tasks, 1 do
+ queue[#queue + 1] = tasks[i]
+ end
+
+ local function processQueue()
+ if #queue == 0 then
+ return
+ end
+
+ while running < limit and #queue > 0 do
+ local task = table.remove(queue, 1)
+
+ running = running + 1
+
+ task(function(result)
+ results[#results+ 1] = result
+
+ remaining = remaining - 1;
+ running = running - 1
+
+ if remaining == 0 then
+ cb(results)
+ end
+ end)
+ end
+
+ CreateThread(processQueue)
+ end
+
+ processQueue()
+end
+
+function Async.series(tasks, cb)
+ Async.parallelLimit(tasks, 1, cb)
+end
diff --git a/[core]/async/fxmanifest.lua b/[core]/async/fxmanifest.lua
new file mode 100644
index 00000000..7f296d3a
--- /dev/null
+++ b/[core]/async/fxmanifest.lua
@@ -0,0 +1,7 @@
+fx_version 'cerulean'
+game 'gta5'
+
+author 'ESX-Framework'
+description 'asynchronous Tasks'
+lua54 'yes'
+shared_script 'async.lua'