예제 #1
0
            public void RegisteredCallbacksAreInvokedAfterSourceIsDisposed()
            {
                CancelationSource cancelationSource = CancelationSource.New();
                CancelationToken  cancelationToken  = cancelationSource.Token;
                bool invoked = false;

                // This should never be done in practice!
                cancelationToken.Register(_ => cancelationSource.Dispose());
                cancelationToken.Register(_ => invoked = true);
                cancelationSource.Cancel();
                Assert.IsTrue(invoked);

                TestHelper.Cleanup();
            }
예제 #2
0
            public void CancelationTokenInvalidOperations()
            {
                CancelationToken cancelationToken = new CancelationToken();

                Assert.Throws <InvalidOperationException>(() => { var _ = cancelationToken.CancelationValue; });
                Assert.Throws <InvalidOperationException>(() => { var _ = cancelationToken.CancelationValueType; });
                Assert.Throws <InvalidOperationException>(() => { cancelationToken.Register(_ => { }); });
                Assert.Throws <InvalidOperationException>(() => { cancelationToken.Register(1, (i, _) => { }); });
                Assert.Throws <InvalidOperationException>(() => { string _; cancelationToken.TryGetCancelationValueAs(out _); });
                Assert.Throws <InvalidOperationException>(cancelationToken.Retain);
                Assert.Throws <InvalidOperationException>(cancelationToken.Release);

                TestHelper.Cleanup();
            }
예제 #3
0
            public void CancelationRegistrationUnregisterCallbackIsNotInvoked3()
            {
                CancelationSource cancelationSource = CancelationSource.New();
                CancelationToken  cancelationToken  = cancelationSource.Token;
                bool invoked = false;
                CancelationRegistration cancelationRegistration = new CancelationRegistration();

                cancelationToken.Register(_ => cancelationRegistration.Unregister());
                cancelationRegistration = cancelationToken.Register(0, (i, _) => invoked = true);
                cancelationSource.Cancel();
                Assert.IsFalse(invoked);
                cancelationSource.Dispose();

                TestHelper.Cleanup();
            }
예제 #4
0
            public void RegisteredCallbackIsRegisteredAfterSourceIsDisposedDuringInvocation()
            {
                CancelationSource cancelationSource = CancelationSource.New();
                CancelationToken  cancelationToken  = cancelationSource.Token;
                // This should never be done in practice!
                CancelationRegistration cancelationRegistration = new CancelationRegistration();

                cancelationToken.Register(_ =>
                {
                    cancelationSource.Dispose();
                    Assert.IsTrue(cancelationRegistration.IsRegistered);
                });
                cancelationRegistration = cancelationToken.Register(_ => { });
                cancelationSource.Cancel();

                TestHelper.Cleanup();
            }
예제 #5
0
            public void RegistrationFromCancelationTokenIsNotRegisteredAfterSourceIsDisposed1()
            {
                CancelationSource       cancelationSource       = CancelationSource.New();
                CancelationToken        cancelationToken        = cancelationSource.Token;
                CancelationRegistration cancelationRegistration = cancelationToken.Register(0, (i, _) => { });

                cancelationSource.Dispose();
                Assert.IsFalse(cancelationRegistration.IsRegistered);

                TestHelper.Cleanup();
            }
예제 #6
0
            public void RegistrationFromCancelationTokenIsRegistered0()
            {
                CancelationSource       cancelationSource       = CancelationSource.New();
                CancelationToken        cancelationToken        = cancelationSource.Token;
                CancelationRegistration cancelationRegistration = cancelationToken.Register(_ => { });

                Assert.IsTrue(cancelationRegistration.IsRegistered);
                cancelationSource.Dispose();

                TestHelper.Cleanup();
            }
예제 #7
0
            public void RegistrationFromCancelationTokenIsNotRegisteredAfterInvoked3()
            {
                CancelationSource       cancelationSource       = CancelationSource.New();
                CancelationToken        cancelationToken        = cancelationSource.Token;
                CancelationRegistration cancelationRegistration = new CancelationRegistration();

                cancelationRegistration = cancelationToken.Register(0, (i, _) => Assert.IsFalse(cancelationRegistration.IsRegistered));
                cancelationSource.Cancel();
                cancelationSource.Dispose();

                TestHelper.Cleanup();
            }
예제 #8
0
            public void CancelationTokenRegisterCaptureVariableMatches()
            {
                CancelationSource cancelationSource = CancelationSource.New();
                CancelationToken  cancelationToken  = cancelationSource.Token;
                string            expected          = "Captured";

                cancelationToken.Register(expected, (cv, _) => Assert.AreEqual(expected, cv));
                cancelationSource.Cancel();
                cancelationSource.Dispose();

                TestHelper.Cleanup();
            }
예제 #9
0
            public void CancelationTokenRegisterCallbackIsInvoked3()
            {
                CancelationSource cancelationSource = CancelationSource.New();
                CancelationToken  cancelationToken  = cancelationSource.Token;
                bool invoked = false;

                cancelationToken.Register(0, (i, _) => invoked = true);
                cancelationSource.Cancel("Cancel");
                Assert.IsTrue(invoked);
                cancelationSource.Dispose();

                TestHelper.Cleanup();
            }
예제 #10
0
            public void RegisteredCallbacksAreInvokedEvenWhenAnExceptionOccurs()
            {
                CancelationSource cancelationSource = CancelationSource.New();
                CancelationToken  cancelationToken  = cancelationSource.Token;
                int callbackCount = 0;

                cancelationToken.Register(_ => ++ callbackCount);
                cancelationToken.Register(_ =>
                {
                    ++callbackCount;
                    throw new Exception();
                });
                cancelationToken.Register(_ => ++ callbackCount);
                try
                {
                    cancelationSource.Cancel();
                }
                catch (Exception) { }
                cancelationSource.Dispose();
                Assert.AreEqual(3, callbackCount);

                TestHelper.Cleanup();
            }
예제 #11
0
            public void RegisteredCallbackExceptionPropagatesToCancelCaller()
            {
                CancelationSource cancelationSource = CancelationSource.New();
                CancelationToken  cancelationToken  = cancelationSource.Token;

                cancelationToken.Register(_ =>
                {
                    throw new Exception();
                });
                Assert.Throws <AggregateException>(cancelationSource.Cancel);
                cancelationSource.Dispose();

                TestHelper.Cleanup();
            }