public void SucceedAddRemoveThreadSafe()
        {
            var called = 0;
            var value  = new MyClass();

            var token = new MutableAsyncToken <MyClass>();

            void SucceedAction(MyClass result)
            {
                called++;

                Assert.AreSame(value, result);

                token.Remove(SucceedAction);
            }

            token.OnSuccess(_ =>
            {
                token.Remove(SucceedAction);
            });
            token.OnSuccess(SucceedAction);

            token.Succeed(value);

            Assert.AreEqual(1, called);
        }
        public void SucceedPost()
        {
            var isCalled = false;
            var value    = new MyClass();

            var token = new MutableAsyncToken <MyClass>();

            token.Succeed(value);

            token
            .OnSuccess(result =>
            {
                isCalled = true;

                Assert.AreSame(value, result);
            })
            .OnFailure(exception => throw exception);

            Assert.IsTrue(isCalled);
        }
        public void SucceedMulti()
        {
            var called = 0;
            var value  = new MyClass();

            var token = new MutableAsyncToken <MyClass>();

            token
            .OnSuccess(result =>
            {
                called++;

                Assert.AreSame(value, result);
            })
            .OnFailure(exception => throw exception);

            token.Succeed(value);
            token.Succeed(value);

            Assert.AreEqual(2, called);
        }