| using Cysharp.Threading.Tasks.Internal; | 
| using System.Threading; | 
|   | 
| namespace Cysharp.Threading.Tasks.Linq | 
| { | 
|     public static partial class UniTaskAsyncEnumerable | 
|     { | 
|         public static IUniTaskAsyncEnumerable<TElement> Repeat<TElement>(TElement element, int count) | 
|         { | 
|             if (count < 0) throw Error.ArgumentOutOfRange(nameof(count)); | 
|   | 
|             return new Repeat<TElement>(element, count); | 
|         } | 
|     } | 
|   | 
|     internal class Repeat<TElement> : IUniTaskAsyncEnumerable<TElement> | 
|     { | 
|         readonly TElement element; | 
|         readonly int count; | 
|   | 
|         public Repeat(TElement element, int count) | 
|         { | 
|             this.element = element; | 
|             this.count = count; | 
|         } | 
|   | 
|         public IUniTaskAsyncEnumerator<TElement> GetAsyncEnumerator(CancellationToken cancellationToken = default) | 
|         { | 
|             return new _Repeat(element, count, cancellationToken); | 
|         } | 
|   | 
|         class _Repeat : IUniTaskAsyncEnumerator<TElement> | 
|         { | 
|             readonly TElement element; | 
|             readonly int count; | 
|             int remaining; | 
|             CancellationToken cancellationToken; | 
|   | 
|             public _Repeat(TElement element, int count, CancellationToken cancellationToken) | 
|             { | 
|                 this.element = element; | 
|                 this.count = count; | 
|                 this.cancellationToken = cancellationToken; | 
|   | 
|                 this.remaining = count; | 
|             } | 
|   | 
|             public TElement Current => element; | 
|   | 
|             public UniTask<bool> MoveNextAsync() | 
|             { | 
|                 cancellationToken.ThrowIfCancellationRequested(); | 
|   | 
|                 if (remaining-- != 0) | 
|                 { | 
|                     return CompletedTasks.True; | 
|                 } | 
|   | 
|                 return CompletedTasks.False; | 
|             } | 
|   | 
|             public UniTask DisposeAsync() | 
|             { | 
|                 return default; | 
|             } | 
|         } | 
|     } | 
| } |