Lock during validity checks

This commit is contained in:
Dean Herbert 2017-12-01 22:43:49 +09:00
parent 87b6181a19
commit 7532795935
1 changed files with 7 additions and 4 deletions

View File

@ -121,6 +121,8 @@ public class AsyncLazy<T>
private readonly Func<T> valueFactory;
private readonly Func<T, bool> stillValidFunction;
private readonly object initLock = new object();
public AsyncLazy(Func<T> valueFactory, Func<T, bool> stillValidFunction = null)
{
this.valueFactory = valueFactory;
@ -134,7 +136,6 @@ public void Recycle()
if (!IsValueCreated) return;
(lazy.Value.Result as IDisposable)?.Dispose();
init();
}
@ -158,9 +159,11 @@ public Task<T> Value
private void ensureValid()
{
if (!lazy.IsValueCreated || (stillValidFunction?.Invoke(lazy.Value.Result) ?? true)) return;
init();
lock (initLock)
{
if (!lazy.IsValueCreated || (stillValidFunction?.Invoke(lazy.Value.Result) ?? true)) return;
init();
}
}
private void init()