#if !NETSTANDARD2_0 #pragma warning disable 0649 using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using System.Threading.Tasks.Sources; namespace Cysharp.Threading.Tasks { public static class AsyncEnumerableExtensions { public static IUniTaskAsyncEnumerable AsUniTaskAsyncEnumerable(this IAsyncEnumerable source) { return new AsyncEnumerableToUniTaskAsyncEnumerable(source); } public static IAsyncEnumerable AsAsyncEnumerable(this IUniTaskAsyncEnumerable source) { return new UniTaskAsyncEnumerableToAsyncEnumerable(source); } sealed class AsyncEnumerableToUniTaskAsyncEnumerable : IUniTaskAsyncEnumerable { readonly IAsyncEnumerable source; public AsyncEnumerableToUniTaskAsyncEnumerable(IAsyncEnumerable source) { this.source = source; } public IUniTaskAsyncEnumerator GetAsyncEnumerator(CancellationToken cancellationToken = default) { return new Enumerator(source.GetAsyncEnumerator(cancellationToken)); } sealed class Enumerator : IUniTaskAsyncEnumerator { readonly IAsyncEnumerator enumerator; public Enumerator(IAsyncEnumerator enumerator) { this.enumerator = enumerator; } public T Current => enumerator.Current; public async UniTask DisposeAsync() { await enumerator.DisposeAsync(); } public async UniTask MoveNextAsync() { return await enumerator.MoveNextAsync(); } } } sealed class UniTaskAsyncEnumerableToAsyncEnumerable : IAsyncEnumerable { readonly IUniTaskAsyncEnumerable source; public UniTaskAsyncEnumerableToAsyncEnumerable(IUniTaskAsyncEnumerable source) { this.source = source; } public IAsyncEnumerator GetAsyncEnumerator(CancellationToken cancellationToken = default) { return new Enumerator(source.GetAsyncEnumerator(cancellationToken)); } sealed class Enumerator : IAsyncEnumerator { readonly IUniTaskAsyncEnumerator enumerator; public Enumerator(IUniTaskAsyncEnumerator enumerator) { this.enumerator = enumerator; } public T Current => enumerator.Current; public ValueTask DisposeAsync() { return enumerator.DisposeAsync(); } public ValueTask MoveNextAsync() { return enumerator.MoveNextAsync(); } } } } } #endif