using System.Threading; namespace Cysharp.Threading.Tasks.Linq { public static partial class UniTaskAsyncEnumerable { public static IUniTaskAsyncEnumerable Never() { return Cysharp.Threading.Tasks.Linq.Never.Instance; } } internal class Never : IUniTaskAsyncEnumerable { public static readonly IUniTaskAsyncEnumerable Instance = new Never(); Never() { } public IUniTaskAsyncEnumerator GetAsyncEnumerator(CancellationToken cancellationToken = default) { return new _Never(cancellationToken); } class _Never : IUniTaskAsyncEnumerator { CancellationToken cancellationToken; public _Never(CancellationToken cancellationToken) { this.cancellationToken = cancellationToken; } public T Current => default; public UniTask MoveNextAsync() { var tcs = new UniTaskCompletionSource(); cancellationToken.Register(state => { var task = (UniTaskCompletionSource)state; task.TrySetCanceled(cancellationToken); }, tcs); return tcs.Task; } public UniTask DisposeAsync() { return default; } } } }