|
|
@@ -25,75 +25,4 @@ namespace System.Linq
|
|
|
/// <returns>Awaitable object for use in an asynchronous method.</returns>
|
|
|
IAwaitable Return(T value);
|
|
|
}
|
|
|
-
|
|
|
- internal sealed class Yielder<T> : IYielder<T>, IAwaitable, IAwaiter
|
|
|
- {
|
|
|
- private readonly Action<Yielder<T>> _create;
|
|
|
- private Action _continuation;
|
|
|
- private bool _hasValue;
|
|
|
- private bool _running;
|
|
|
- private bool _stopped;
|
|
|
-
|
|
|
- public Yielder(Action<Yielder<T>> create)
|
|
|
- {
|
|
|
- _create = create;
|
|
|
- }
|
|
|
-
|
|
|
- public T Current { get; private set; }
|
|
|
-
|
|
|
- public IAwaiter GetAwaiter() => this;
|
|
|
-
|
|
|
- public bool IsCompleted => false;
|
|
|
-
|
|
|
- public void GetResult()
|
|
|
- {
|
|
|
- }
|
|
|
-
|
|
|
- [SecurityCritical]
|
|
|
- public void UnsafeOnCompleted(Action continuation)
|
|
|
- {
|
|
|
- _continuation = continuation;
|
|
|
- }
|
|
|
-
|
|
|
- public void OnCompleted(Action continuation)
|
|
|
- {
|
|
|
- _continuation = continuation;
|
|
|
- }
|
|
|
-
|
|
|
- public IAwaitable Return(T value)
|
|
|
- {
|
|
|
- _hasValue = true;
|
|
|
- Current = value;
|
|
|
- return this;
|
|
|
- }
|
|
|
-
|
|
|
- public IAwaitable Break()
|
|
|
- {
|
|
|
- _stopped = true;
|
|
|
- return this;
|
|
|
- }
|
|
|
-
|
|
|
- public Yielder<T> GetEnumerator() => this;
|
|
|
-
|
|
|
- public bool MoveNext()
|
|
|
- {
|
|
|
- if (!_running)
|
|
|
- {
|
|
|
- _running = true;
|
|
|
- _create(this);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- _hasValue = false;
|
|
|
- _continuation();
|
|
|
- }
|
|
|
-
|
|
|
- return !_stopped && _hasValue;
|
|
|
- }
|
|
|
-
|
|
|
- public void Reset()
|
|
|
- {
|
|
|
- throw new NotSupportedException();
|
|
|
- }
|
|
|
- }
|
|
|
}
|