From d5d2cb5937e615f2c0f2c0222ae895555a021444 Mon Sep 17 00:00:00 2001 From: neuecc Date: Mon, 9 Nov 2020 14:34:11 +0900 Subject: [PATCH] use Dictionary instead of ConcurrentDictionary for safety of WebGL build, #179 --- .../Assets/Plugins/UniTask/Runtime/TaskPool.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) 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; }