Exemplo n.º 1
0
        public void AwaitOnCompleted <TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
            where TAwaiter : INotifyCompletion
            where TStateMachine : IAsyncStateMachine
        {
            switch (awaiter)
            {
            case IBreakable breakableAwaiter:
                _inner = breakableAwaiter;
                awaiter.OnCompleted(_continuation);
                break;

            case SelfScopeAwaiter selfScopeAwaiter:
                selfScopeAwaiter.Value = Task.Scope;
                awaiter.OnCompleted(_continuation);
                break;

            case SelfDisposeAwaiter selfDisposeAwaiter:
                selfDisposeAwaiter.Value = Task._Dispose;
                awaiter.OnCompleted(_continuation);
                break;

            default:
                Asr.Fail("passed unbreakable awaiter");
                break;
            }
        }
Exemplo n.º 2
0
 public void GetOrFail(out T value)
 {
     if (!TryGet(out value))
     {
         Asr.Fail($"Option<{typeof(T).Name}> has no value");
     }
 }
Exemplo n.º 3
0
 public T GetOrFail()
 {
     if (!TryGet(out var value))
     {
         Asr.Fail($"Option<{typeof(T).Name}> has no value");
     }
     return(value);
 }
Exemplo n.º 4
0
        public void Unsubscribe(Action dispose)
        {
            if (Disposed || Disposing)
            {
                Asr.Fail("Cannot unsubscribe during or after disposal");
                return;
            }

            var any = _stack.Remove(dispose);

            Asr.IsTrue(any, "Delegate not found: make sure it's the same which was passed to OnDispose");
        }
Exemplo n.º 5
0
        public static void Deregister(TTarget target)
        {
            var hash = _generator.GetId(target, out var firstTime);

            Asr.IsFalse(firstTime);
            if (_Registry.TryGetValue(hash, out var t))
            {
                _Registry[hash].Deregistered = true;
            }
            else
            {
                Asr.Fail("No such key");
            }
        }
Exemplo n.º 6
0
        public static void Deregister(TTarget target)
        {
            var hash = _generator.GetId(target, out var firstTime);

            Asr.IsFalse(firstTime);
            if (_eventRegistry.TryGetValue(hash, out var t))
            {
                t.OnDeregister?.Invoke();
            }
            else
            {
                Asr.Fail("No such key");
            }

            _eventRegistry.Remove(hash);
        }
Exemplo n.º 7
0
        public void Subscribe(Action callback, IScope scope)
        {
            if (_completed)
            {
                Asr.Fail("Tried to subscribe to ISub which is completed");
                return;
            }

            Asr.IsFalse(scope.Disposed);

            var node = _next.AddLast(callback);

            scope.Subscribe(Remove);

            void Remove()
            {
                node.List?.Remove(node);
            }
        }
Exemplo n.º 8
0
        public void Publish()
        {
            if (_completed)
            {
                Asr.Fail("Tried to publish Next to IPub which is completed");
                return;
            }


            Asr.IsTrue(_current.Count == 0);
            Swap();
            Run(_current, _next);

            void Swap()
            {
                var tmp = _current;

                _current = _next;
                _next    = tmp;
            }
        }