@@ -136,6 +136,7 @@ abstract class ManagedCacheBase<T> : ScriptObjectSingleton<T> where T : Scriptab
136136 [ SerializeField ] private string initializedAtString = DateTimeOffset . MinValue . ToString ( Constants . Iso8601Format ) ;
137137 [ NonSerialized ] private DateTimeOffset ? lastUpdatedAtValue ;
138138 [ NonSerialized ] private DateTimeOffset ? initializedAtValue ;
139+ [ NonSerialized ] private bool isInvalidating ;
139140
140141 public event Action < CacheType > CacheInvalidated ;
141142 public event Action < CacheType , DateTimeOffset > CacheUpdated ;
@@ -151,7 +152,7 @@ public bool ValidateData()
151152 var isInitialized = IsInitialized ;
152153 var timedOut = DateTimeOffset . Now - LastUpdatedAt > DataTimeout ;
153154 var needsInvalidation = ! isInitialized || timedOut ;
154- if ( needsInvalidation )
155+ if ( needsInvalidation && ! isInvalidating )
155156 {
156157 Logger . Trace ( "needsInvalidation isInitialized:{0} timedOut:{1}" , isInitialized , timedOut ) ;
157158 InvalidateData ( ) ;
@@ -161,21 +162,27 @@ public bool ValidateData()
161162
162163 public void InvalidateData ( )
163164 {
164- Logger . Trace ( "Invalidate" ) ;
165- LastUpdatedAt = DateTimeOffset . MinValue ;
166- CacheInvalidated . SafeInvoke ( CacheType ) ;
165+ if ( ! isInvalidating )
166+ {
167+ Logger . Trace ( "Invalidate" ) ;
168+ isInvalidating = true ;
169+ LastUpdatedAt = DateTimeOffset . MinValue ;
170+ CacheInvalidated . SafeInvoke ( CacheType ) ;
171+ }
167172 }
168173
169174 protected void SaveData ( DateTimeOffset now , bool isChanged )
170175 {
171176 var isInitialized = IsInitialized ;
172177 isChanged = isChanged || ! isInitialized ;
173178
174- InitializedAt = ! isInitialized ? now : InitializedAt ;
175- LastUpdatedAt = isChanged ? now : LastUpdatedAt ;
179+ InitializedAt = ! isInitialized || InitializedAt == DateTimeOffset . MinValue ? now : InitializedAt ;
180+ LastUpdatedAt = isChanged || LastUpdatedAt == DateTimeOffset . MinValue ? now : LastUpdatedAt ;
176181
177182 Save ( true ) ;
178183
184+ isInvalidating = false ;
185+
179186 if ( isChanged )
180187 {
181188 Logger . Trace ( "Updated: {0}" , now ) ;
0 commit comments