diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/TaskPool.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/TaskPool.cs index 8bae491..8e61932 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/TaskPool.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/TaskPool.cs @@ -12,7 +12,9 @@ namespace Cysharp.Threading.Tasks public static class TaskPool { internal static int MaxPoolSize; - static ConcurrentDictionary> sizes = new ConcurrentDictionary>(); + + // avoid to use ConcurrentDictionary for safety of WebGL build. + static Dictionary> sizes = new Dictionary>(); static TaskPool() { @@ -40,19 +42,24 @@ namespace Cysharp.Threading.Tasks public static IEnumerable<(Type, int)> GetCacheSizeInfo() { - foreach (var item in sizes) + lock (sizes) { - yield return (item.Key, item.Value()); + foreach (var item in sizes) + { + yield return (item.Key, item.Value()); + } } } public static void RegisterSizeGetter(Type type, Func getSize) { - sizes[type] = getSize; + lock (sizes) + { + sizes[type] = getSize; + } } } - public interface ITaskPoolNode { ref T NextNode { get; }