public WhenAllPromiseAll(IEnumerable <ValueTask> tasks)
            {
                if (tasks is ValueTask[] array)
                {
                    Run(array);
                    return;
                }
                if (tasks is IReadOnlyCollection <ValueTask> c)
                {
                    Run(c, c.Count);
                    return;
                }
                if (tasks is ICollection <ValueTask> c2)
                {
                    Run(c2, c2.Count);
                    return;
                }

                var list = new TempList <ValueTask>(99);

                try
                {
                    foreach (var item in tasks)
                    {
                        list.Add(item);
                    }

                    Run(list.AsSpan());
                }
                finally
                {
                    list.Dispose();
                }
            }
            public WhenAllPromiseAll(IEnumerable <ValueTask <T> > tasks)
            {
                if (tasks is ValueTask <T>[] array)
                {
                    result = CreateArray(array.Length);
                    Run(array);
                    return;
                }
                if (tasks is IReadOnlyCollection <ValueTask <T> > c)
                {
                    result = CreateArray(c.Count);
                    Run(c, c.Count);
                    return;
                }
                if (tasks is ICollection <ValueTask <T> > c2)
                {
                    result = CreateArray(c2.Count);
                    Run(c2, c2.Count);
                    return;
                }

                var list = new TempList <ValueTask <T> >(99);

                try
                {
                    foreach (var item in tasks)
                    {
                        list.Add(item);
                    }

                    var span = list.AsSpan();
                    result = CreateArray(span.Length);
                    Run(span);
                }
                finally
                {
                    list.Dispose();
                }
            }