diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Threading/KeyedLock.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Threading/KeyedLock.cs
new file mode 100644
index 0000000000..80e750ac33
--- /dev/null
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/Threading/KeyedLock.cs
@@ -0,0 +1,152 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Volo.Abp.Threading;
+
+///
+/// Per-key asynchronous lock.
+/// https://stackoverflow.com/a/31194647
+///
+public static class KeyedLock
+{
+ private static readonly Dictionary