using System; using System.Threading; using Cysharp.Threading.Tasks.Internal; namespace Cysharp.Threading.Tasks.Linq { public static partial class UniTaskAsyncEnumerable { public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); return Sum.SumAsync(source, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAsync(source, selector, cancellationToken); } public static UniTask SumAwaitAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitAsync(source, selector, cancellationToken); } public static UniTask SumAwaitWithCancellationAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitWithCancellationAsync(source, selector, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); return Sum.SumAsync(source, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAsync(source, selector, cancellationToken); } public static UniTask SumAwaitAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitAsync(source, selector, cancellationToken); } public static UniTask SumAwaitWithCancellationAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitWithCancellationAsync(source, selector, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); return Sum.SumAsync(source, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAsync(source, selector, cancellationToken); } public static UniTask SumAwaitAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitAsync(source, selector, cancellationToken); } public static UniTask SumAwaitWithCancellationAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitWithCancellationAsync(source, selector, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); return Sum.SumAsync(source, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAsync(source, selector, cancellationToken); } public static UniTask SumAwaitAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitAsync(source, selector, cancellationToken); } public static UniTask SumAwaitWithCancellationAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitWithCancellationAsync(source, selector, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); return Sum.SumAsync(source, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAsync(source, selector, cancellationToken); } public static UniTask SumAwaitAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitAsync(source, selector, cancellationToken); } public static UniTask SumAwaitWithCancellationAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitWithCancellationAsync(source, selector, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); return Sum.SumAsync(source, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAsync(source, selector, cancellationToken); } public static UniTask SumAwaitAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitAsync(source, selector, cancellationToken); } public static UniTask SumAwaitWithCancellationAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitWithCancellationAsync(source, selector, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); return Sum.SumAsync(source, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAsync(source, selector, cancellationToken); } public static UniTask SumAwaitAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitAsync(source, selector, cancellationToken); } public static UniTask SumAwaitWithCancellationAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitWithCancellationAsync(source, selector, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); return Sum.SumAsync(source, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAsync(source, selector, cancellationToken); } public static UniTask SumAwaitAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitAsync(source, selector, cancellationToken); } public static UniTask SumAwaitWithCancellationAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitWithCancellationAsync(source, selector, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); return Sum.SumAsync(source, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAsync(source, selector, cancellationToken); } public static UniTask SumAwaitAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitAsync(source, selector, cancellationToken); } public static UniTask SumAwaitWithCancellationAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitWithCancellationAsync(source, selector, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); return Sum.SumAsync(source, cancellationToken); } public static UniTask SumAsync(this IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAsync(source, selector, cancellationToken); } public static UniTask SumAwaitAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitAsync(source, selector, cancellationToken); } public static UniTask SumAwaitWithCancellationAsync(this IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken = default) { Error.ThrowArgumentNullException(source, nameof(source)); Error.ThrowArgumentNullException(source, nameof(selector)); return Sum.SumAwaitWithCancellationAsync(source, selector, cancellationToken); } } internal static class Sum { public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, CancellationToken cancellationToken) { Int32 sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += e.Current; } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken) { Int32 sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += selector(e.Current); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Int32 sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current)); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitWithCancellationAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Int32 sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current, cancellationToken)); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, CancellationToken cancellationToken) { Int64 sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += e.Current; } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken) { Int64 sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += selector(e.Current); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Int64 sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current)); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitWithCancellationAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Int64 sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current, cancellationToken)); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, CancellationToken cancellationToken) { Single sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += e.Current; } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken) { Single sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += selector(e.Current); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Single sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current)); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitWithCancellationAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Single sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current, cancellationToken)); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, CancellationToken cancellationToken) { Double sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += e.Current; } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken) { Double sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += selector(e.Current); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Double sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current)); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitWithCancellationAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Double sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current, cancellationToken)); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, CancellationToken cancellationToken) { Decimal sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += e.Current; } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken) { Decimal sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += selector(e.Current); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Decimal sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current)); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitWithCancellationAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Decimal sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current, cancellationToken)); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, CancellationToken cancellationToken) { Int32? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += e.Current.GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken) { Int32? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += selector(e.Current).GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Int32? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current)).GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitWithCancellationAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Int32? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current, cancellationToken)).GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, CancellationToken cancellationToken) { Int64? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += e.Current.GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken) { Int64? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += selector(e.Current).GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Int64? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current)).GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitWithCancellationAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Int64? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current, cancellationToken)).GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, CancellationToken cancellationToken) { Single? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += e.Current.GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken) { Single? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += selector(e.Current).GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Single? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current)).GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitWithCancellationAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Single? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current, cancellationToken)).GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, CancellationToken cancellationToken) { Double? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += e.Current.GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken) { Double? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += selector(e.Current).GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Double? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current)).GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitWithCancellationAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Double? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current, cancellationToken)).GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, CancellationToken cancellationToken) { Decimal? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += e.Current.GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAsync(IUniTaskAsyncEnumerable source, Func selector, CancellationToken cancellationToken) { Decimal? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += selector(e.Current).GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Decimal? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current)).GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } public static async UniTask SumAwaitWithCancellationAsync(IUniTaskAsyncEnumerable source, Func> selector, CancellationToken cancellationToken) { Decimal? sum = default; var e = source.GetAsyncEnumerator(cancellationToken); try { while (await e.MoveNextAsync()) { sum += (await selector(e.Current, cancellationToken)).GetValueOrDefault(); } } finally { if (e != null) { await e.DisposeAsync(); } } return sum; } } }