use Dictionary instead of ConcurrentDictionary for safety of WebGL build, #179

master
neuecc 2020-11-09 14:34:11 +09:00
parent 854100c075
commit d5d2cb5937
1 changed files with 12 additions and 5 deletions

View File

@ -12,7 +12,9 @@ namespace Cysharp.Threading.Tasks
public static class TaskPool public static class TaskPool
{ {
internal static int MaxPoolSize; internal static int MaxPoolSize;
static ConcurrentDictionary<Type, Func<int>> sizes = new ConcurrentDictionary<Type, Func<int>>();
// avoid to use ConcurrentDictionary for safety of WebGL build.
static Dictionary<Type, Func<int>> sizes = new Dictionary<Type, Func<int>>();
static TaskPool() static TaskPool()
{ {
@ -40,19 +42,24 @@ namespace Cysharp.Threading.Tasks
public static IEnumerable<(Type, int)> GetCacheSizeInfo() 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<int> getSize) public static void RegisterSizeGetter(Type type, Func<int> getSize)
{ {
sizes[type] = getSize; lock (sizes)
{
sizes[type] = getSize;
}
} }
} }
public interface ITaskPoolNode<T> public interface ITaskPoolNode<T>
{ {
ref T NextNode { get; } ref T NextNode { get; }