ソースを参照

!1880 1.解决使用 _sysCacheService.AdGetAsync() 异步方法时报错 does not contain a definition for 'DynamicInvokeAsync 的问题
Merge pull request !1880 from hwjmyz/v2-20250816-2

zuohuaijun 8 ヶ月 前
コミット
b328d9748a
1 ファイル変更20 行追加6 行削除
  1. 20 6
      Admin.NET/Admin.NET.Core/Service/Cache/SysCacheService.cs

+ 20 - 6
Admin.NET/Admin.NET.Core/Service/Cache/SysCacheService.cs

@@ -108,8 +108,18 @@ public class SysCacheService : IDynamicApiController, ISingleton
         using (_cacheProvider.Cache.AcquireLock($@"lock:AdGetAsync:{cacheName}", 1000))
         {
             var value = Get<T>(key);
-            value ??= await ((dynamic)del).DynamicInvokeAsync(obs);
-            Set(key, value);
+            if (value == null)
+            {
+                value = await ((dynamic)del).DynamicInvoke(obs);
+                if (expiry == null)
+                {
+                    Set(key, value);
+                }
+                else
+                {
+                    Set(key, value, (TimeSpan)expiry);
+                }
+            }
             return value;
         }
     }
@@ -131,15 +141,19 @@ public class SysCacheService : IDynamicApiController, ISingleton
 
     private T Get<T>(String cacheName, Object[] obs)
     {
-        var key = cacheName + ":" + obs.Aggregate(string.Empty, (current, o) => current + $"<{o}>");
+        var key = Key(cacheName, obs);
         return Get<T>(key);
     }
 
     private static string Key(string cacheName, object[] obs)
     {
-        if (obs.OfType<TimeSpan>().Any()) throw new Exception("缓存参数类型不能能是:TimeSpan类型");
-        StringBuilder sb = new(cacheName + ":");
-        foreach (var a in obs) sb.Append($"<{KeySingle(a)}>");
+        if (obs.OfType<TimeSpan>().Any()) throw new Exception("缓存参数类型不能是:TimeSpan类型");
+        StringBuilder sb = new(cacheName);
+        if (obs is { Length: > 0 })
+        {
+            sb.Append(':');
+            foreach (var a in obs) sb.Append($"<{KeySingle(a)}>");
+        }
         return sb.ToString();
     }