mirror of
https://github.com/Cysharp/UniTask.git
synced 2026-05-22 15:50:10 +00:00
Never
This commit is contained in:
57
src/UniTask.NetCore/Linq/Never.cs
Normal file
57
src/UniTask.NetCore/Linq/Never.cs
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
using System.Threading;
|
||||||
|
|
||||||
|
namespace Cysharp.Threading.Tasks.Linq
|
||||||
|
{
|
||||||
|
public static partial class UniTaskAsyncEnumerable
|
||||||
|
{
|
||||||
|
public static IUniTaskAsyncEnumerable<T> Never<T>()
|
||||||
|
{
|
||||||
|
return Cysharp.Threading.Tasks.Linq.Never<T>.Instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class Never<T> : IUniTaskAsyncEnumerable<T>
|
||||||
|
{
|
||||||
|
public static readonly IUniTaskAsyncEnumerable<T> Instance = new Never<T>();
|
||||||
|
|
||||||
|
Never()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public IUniTaskAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
return new Enumerator(cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
class Enumerator : IUniTaskAsyncEnumerator<T>
|
||||||
|
{
|
||||||
|
CancellationToken cancellationToken;
|
||||||
|
|
||||||
|
public Enumerator(CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
this.cancellationToken = cancellationToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T Current => default;
|
||||||
|
|
||||||
|
public UniTask<bool> MoveNextAsync()
|
||||||
|
{
|
||||||
|
var tcs = new UniTaskCompletionSource<bool>();
|
||||||
|
|
||||||
|
cancellationToken.Register(state =>
|
||||||
|
{
|
||||||
|
var task = (UniTaskCompletionSource<bool>)state;
|
||||||
|
task.TrySetCanceled(cancellationToken);
|
||||||
|
}, tcs);
|
||||||
|
|
||||||
|
return tcs.Task;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UniTask DisposeAsync()
|
||||||
|
{
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -59,6 +59,7 @@ namespace UniTask.NetCoreTests.Linq
|
|||||||
xs.Length.Should().Be(1);
|
xs.Length.Should().Be(1);
|
||||||
xs[0].Should().Be(value);
|
xs[0].Should().Be(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user