mirror of https://github.com/ppy/osu
Lock during validity checks
This commit is contained in:
parent
87b6181a19
commit
7532795935
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue