| using Cysharp.Threading.Tasks.Internal; | 
| using System; | 
| using System.Threading; | 
|   | 
| namespace Cysharp.Threading.Tasks.Linq | 
| { | 
|     public static partial class UniTaskAsyncEnumerable | 
|     { | 
|         public static IUniTaskAsyncEnumerable<TValue> Throw<TValue>(Exception exception) | 
|         { | 
|             return new Throw<TValue>(exception); | 
|         } | 
|     } | 
|   | 
|     internal class Throw<TValue> : IUniTaskAsyncEnumerable<TValue> | 
|     { | 
|         readonly Exception exception; | 
|   | 
|         public Throw(Exception exception) | 
|         { | 
|             this.exception = exception; | 
|         } | 
|   | 
|         public IUniTaskAsyncEnumerator<TValue> GetAsyncEnumerator(CancellationToken cancellationToken = default) | 
|         { | 
|             return new _Throw(exception, cancellationToken); | 
|         } | 
|   | 
|         class _Throw : IUniTaskAsyncEnumerator<TValue> | 
|         { | 
|             readonly Exception exception; | 
|             CancellationToken cancellationToken; | 
|   | 
|             public _Throw(Exception exception, CancellationToken cancellationToken) | 
|             { | 
|                 this.exception = exception; | 
|                 this.cancellationToken = cancellationToken; | 
|             } | 
|   | 
|             public TValue Current => default; | 
|   | 
|             public UniTask<bool> MoveNextAsync() | 
|             { | 
|                 cancellationToken.ThrowIfCancellationRequested(); | 
|                 return UniTask.FromException<bool>(exception); | 
|             } | 
|   | 
|             public UniTask DisposeAsync() | 
|             { | 
|                 return default; | 
|             } | 
|         } | 
|     } | 
| } |